Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  KeyStoreUtils.java   Sprache: JAVA

 
/*
 * Copyright (c) 2019, 2022, Oracle and/or its affiliates. All rights reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 * or visit www.oracle.com if you need additional information or have any
 * questions.
 */


package jdk.test.lib.security;

import java.io.*;
import java.io.ByteArrayInputStream;
import java.io.FileInputStream;
import java.io.InputStream;
import java.security.KeyStore;
import java.security.PrivateKey;
import java.security.cert.Certificate;
import java.security.cert.CertificateFactory;
import java.util.ArrayList;
import java.util.Base64;
import java.util.List;

/*
 * Utilities for creating key store.
 */

public class KeyStoreUtils {

    private static final String DEFAULT_TYPE = KeyStore.getDefaultType();

    /**
     * Create key store with a given input stream.
     *
     * @param type the key store type
     * @param input the input stream containing a key store
     * @param password the password used to check the integrity of the key store
     * @return the key store
     * @throws Exception on errors
     */

    public static KeyStore loadKeyStore(String type, InputStream input,
            String password) throws Exception {
        KeyStore keyStore = KeyStore.getInstance(type);
        try {
            keyStore.load(input,
                    password == null ? null : password.toCharArray());
            return keyStore;
        } finally {
            if (input != null) {
                input.close();
            }
        }
    }

    /**
     * Create key store with a given input stream.
     *
     * @param input the input stream containing a key store
     * @param password the password used to check the integrity of the key store
     * @return the key store
     * @throws Exception on errors
     */

    public static KeyStore loadKeyStore(InputStream input, String password)
            throws Exception {
        return loadKeyStore(DEFAULT_TYPE, input, password);
    }

    /**
     * Create key store with given Base64-encoded string.
     *
     * @param keyStoreBase64 the Base64-encoded string containing a key store
     * @param password the password used to check the integrity of the key store
     * @return the key store
     * @throws Exception on errors
     */

    public static KeyStore loadKeyStoreBase64(String keyStoreBase64,
            String password) throws Exception {
        return loadKeyStore(DEFAULT_TYPE, new ByteArrayInputStream(
                Base64.getDecoder().decode(keyStoreBase64)), password);
    }

    /**
     * Create key store with a given file.
     *
     * @param type the key store type
     * @param path the path to file containing a key store
     * @param password the password used to check the integrity of the key store
     * @return the key store
     * @throws Exception on errors
     */

    public static KeyStore loadKeyStore(String type, String path,
            String password) throws Exception {
        return loadKeyStore(type, new FileInputStream(path), password);
    }

    /**
     * Create key store with a given file.
     *
     * @param path the path to file containing a key store
     * @param password the password used to check the integrity of the key store
     * @return the key store
     * @throws Exception on errors
     */

    public static KeyStore loadKeyStore(String path, String password)
            throws Exception {
        return loadKeyStore(DEFAULT_TYPE, path, password);
    }

    /**
     * Create trust store with given certificates and corresponding aliases.
     *
     * @param type the key store type
     * @param certStrs the certificates added to the trust store
     * @param aliases the aliases corresponding to the trust entries respectively
     * @return the trust store
     * @throws Exception on errors
     */

    public static KeyStore createTrustStore(String type, String[] certStrs,
            String[] aliases) throws Exception {
        if (aliases != null && aliases.length != certStrs.length) {
            throw new IllegalArgumentException(
                    "The counts of certs and aliases are not matching.");
        }

        KeyStore trustStore = initKeyStore(type);

        for (int i = 0; i < certStrs.length; i++) {
            String alias = aliases == null ? "trust-" + i : aliases[i];
            trustStore.setCertificateEntry(alias,
                    CertUtils.getCertFromString(certStrs[i]));
        }

        return trustStore;
    }

    /**
     * Create trust store with given certificates.
     *
     * @param type the key store type
     * @param certStrs the certificates added to the trust store
     * @return the trust store
     * @throws Exception on errors
     */

    public static KeyStore createTrustStore(String type, String[] certStrs)
            throws Exception {
        return createTrustStore(type, certStrs, null);
    }

    /**
     * Create trust store with given certificates and corresponding aliases.
     *
     * @param certStrs the certificates added to the trust store
     * @param aliases the aliases corresponding to the trust entries respectively
     * @return the trust store
     * @throws Exception on errors
     */

    public static KeyStore createTrustStore(String[] certStrs, String[] aliases)
            throws Exception {
        return createTrustStore(DEFAULT_TYPE, certStrs, aliases);
    }

    /**
     * Create trust store with given certificates.
     *
     * @param certStrs the certificates added to the trust store
     * @return the trust store
     * @throws Exception on errors
     */

    public static KeyStore createTrustStore(String[] certStrs) throws Exception {
        return createTrustStore(DEFAULT_TYPE, certStrs, null);
    }

    /**
     * Create key store with given entries and corresponding aliases.
     *
     * @param type the key store type
     * @param entries the key entries added to the key store
     * @param aliases the aliases corresponding to the key entries respectively
     * @return the key store
     * @throws Exception on errors
     */

    public static KeyStore createKeyStore(String type, KeyEntry[] entries,
            String[] aliases) throws Exception {
        if (aliases != null && aliases.length != entries.length) {
            throw new IllegalArgumentException(
                    "The counts of entries and aliases are not matching.");
        }

        KeyStore keyStore = initKeyStore(type);

        for (int i = 0; i < entries.length; i++) {
            KeyEntry entry = entries[i];
            PrivateKey key = CertUtils.getKeyFromString(
                    entry.keyAlgo, entry.keyStr);
            char[] password = entry.password == null
                    ? null
                    : entry.password.toCharArray();
            Certificate[] chain = new Certificate[entry.certStrs.length];
            for (int j = 0; j < chain.length; j++) {
                chain[j] = CertUtils.getCertFromString(entry.certStrs[j]);
            }

            String alias = aliases == null ? "cert-" + i : aliases[i];
            keyStore.setKeyEntry(alias, key, password, chain);
        }

        return keyStore;
    }

    /**
     * Create key store with given entries.
     *
     * @param type the key store type
     * @param entries the key entries added to the key store
     * @return the key store
     * @throws Exception on errors
     */

    public static KeyStore createKeyStore(String type, KeyEntry[] entries)
            throws Exception {
        return createKeyStore(type, entries, null);
    }

    /**
     * Create key store with given entries and corresponding aliases.
     *
     * @param entries the key entries added to the key store
     * @param aliases the aliases corresponding to the key entries respectively
     * @return the key store
     * @throws Exception on errors
     */

    public static KeyStore createKeyStore(KeyEntry[] entries, String[] aliases)
            throws Exception {
        return createKeyStore(DEFAULT_TYPE, entries, aliases);
    }

    /**
     * Create key store with given entries.
     *
     * @param entries the key entries added to the key store
     * @return the key store
     * @throws Exception on errors
     */

    public static KeyStore createKeyStore(KeyEntry[] entries) throws Exception {
        return createKeyStore(DEFAULT_TYPE, entries, null);
    }

    // Initialize key store with given store type.
    // Note that it always has no password.
    private static KeyStore initKeyStore(String type) throws Exception {
        KeyStore keyStore = KeyStore.getInstance(type);
        keyStore.load(nullnull);
        return keyStore;
    }

    /**
     * The default trust store that contains RSA, ECDSA, RSASSA-PSS and DSA
     * certificates.
     */

    public static KeyStore defaultTrustStore() throws Exception {
        return createTrustStore(
                new String[] { CertUtils.RSA_CERT, CertUtils.ECDSA_CERT,
                        CertUtils.RSASSAPSS_CERT, CertUtils.DSA_CERT });
    }

    /**
     * The default key store that contains RSA, ECDSA, RSASSA-PSS and DSA
     * certificates.
     */

    public static KeyStore defaultKeyStore() throws Exception {
        List<KeyEntry> entries = new ArrayList<>();
        entries.add(new KeyEntry("RSA", CertUtils.RSA_KEY,
                new String[] { CertUtils.RSA_CERT }));
        entries.add(new KeyEntry("EC", CertUtils.ECDSA_KEY,
                new String[] { CertUtils.ECDSA_CERT }));
        entries.add(new KeyEntry("RSASSA-PSS", CertUtils.RSASSAPSS_KEY,
                new String[] { CertUtils.RSASSAPSS_CERT }));
        entries.add(new KeyEntry("DSA", CertUtils.DSA_KEY,
                new String[] { CertUtils.DSA_CERT }));
        return createKeyStore(entries.toArray(new KeyEntry[entries.size()]));
    }

    /**
     * Creates cacerts keystore with the trusted certificate(s)
     * @param args arguments to cacerts keystore name and trusted certificates
     * @throws Exception if there is an error
     *
     */

    public static void createCacerts(String ks, String... crts) throws Exception {
        try (OutputStream os = new FileOutputStream(ks)) {
            KeyStore k = KeyStore.getInstance("JKS");
            k.load(nullnull);
            CertificateFactory cf = CertificateFactory.getInstance("X.509");
            for (int pos = 0; pos < crts.length; pos++) {
                try (InputStream is = new FileInputStream(crts[pos])) {
                    k.setCertificateEntry("root" + pos,
                            cf.generateCertificate(is));
                }
            }
            k.store(os, "changeit".toCharArray());
        }
    }
}

Messung V0.5
C=95 H=89 G=91

¤ Dauer der Verarbeitung: 0.1 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge