Créer un CSR avec des informations étendues en Java

Même si vous le recherchez sur Google, ce ne sera pas un succès en japonais, donc il n'y aura peut-être pas beaucoup de demande, mais ...

Environnement d'exploitation

La version de Bouncy Castle utilisée est la suivante. C'est trop vieux!

Création d'un CSR avec clé privée, clé publique et informations étendues

public class CreateExtensionCsr {
    public static void main(String[] args) throws Exception {
        //Générez une clé de cryptage RSA pour échanger en toute sécurité la clé de cryptage entre deux points.
        KeyPairGenerator keygen = KeyPairGenerator.getInstance("RSA");
        keygen.initialize(2048);
        KeyPair keyPair = keygen.generateKeyPair();

        //Clé privée
        PrivateKey privateKey = keyPair.getPrivate();

        //Clé publique
        PublicKey publicKey = keyPair.getPublic();

        //Créer un CSR
        Security.addProvider(new BouncyCastleProvider());
        PKCS10CertificationRequest certReq = generateRequest(privateKey, publicKey);
        
        //Convertir au format PEM
        String csr = toPem(certReq);

        System.out.println(csr);
    }

    /**
     *Créer un CSR avec des informations étendues
     */
    public static PKCS10CertificationRequest generateRequest(PrivateKey privateKey,
            PublicKey publicKey) throws Exception {
        Vector oids = new Vector();
        Vector values = new Vector();

        //Créer des informations étendues
        oids.add(X509Extensions.SubjectKeyIdentifier);
        values.add(new X509Extension(false, new DEROctetString(new SubjectKeyIdentifierStructure(
                publicKey))));
        oids.add(X509Extensions.KeyUsage);
        values.add(new X509Extension(true, new DEROctetString(new KeyUsage(
                KeyUsage.digitalSignature))));

        //Accorder des informations étendues
        X509Extensions extensions = new X509Extensions(oids, values);
        Attribute attribute =
                new Attribute(PKCSObjectIdentifiers.pkcs_9_at_extensionRequest, new DERSet(
                        extensions));

        //Créer un CSR
        return new PKCS10CertificationRequest("SHA256withRSA", new X500Principal(
                "C=JP"), publicKey, new DERSet(
                attribute), privateKey);
    }

    /**
     *Convertir au format PEM
     */
    private static String toPem(Object obj) throws IOException {
        StringWriter sw = new StringWriter();
        PEMWriter writer = null;
        try {
            writer = new PEMWriter(sw);
            writer.writeObject(obj);
            writer.flush();
        } finally {
            if (writer != null) {
                writer.close();
            }
        }
        return sw.toString();
    }
}

Confirmation du contenu RSE

$ openssl req -text -noout -in testcreate.csr
Certificate Request:
    Data:
        Version: 0 (0x0)
        Subject: C=JP
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:b4:ed:73:b2:3a:02:d6:e5:6c:33:29:98:0a:cc:
                    f8:74:43:e0:04:8b:98:1f:f0:4d:1c:28:6e:b4:ec:
                    <<réduction>>
                Exponent: 65537 (0x10001)
        Attributes:
        Requested Extensions:
            X509v3 Subject Key Identifier:
                00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:0
            X509v3 Key Usage: critical
                Digital Signature
    Signature Algorithm: sha256WithRSAEncryption
         8d:b7:fd:e2:14:04:7a:85:02:f1:d5:49:c0:02:c8:f2:46:72:
         b9:b5:f5:b3:e3:cf:06:ae:44:7a:37:12:b2:3d:7b:86:d0:db:
         <<réduction>>

Recommended Posts

Créer un CSR avec des informations étendues en Java
Créer un SlackBot avec AWS lambda et API Gateway en Java
Créer une application TODO dans Java 7 Créer un en-tête
Diviser une chaîne avec ". (Dot)" en Java
Je ne peux pas créer une classe Java avec un nom spécifique dans IntelliJ
Lire une chaîne dans un fichier PDF avec Java
Créez un tableau d'affichage simple avec Java + MySQL
[Windows] [IntelliJ] [Java] [Tomcat] Créer un environnement pour Tomcat 9 avec IntelliJ
Créons un processus chronométré avec la minuterie de Java! !!
[Java] Créer un filtre
Essayez de créer un babillard en Java
[Java] Créer une collection avec un seul élément
Créons un framework Web ultra-simple avec Java
Créer JSON en Java
Faisons une application de calculatrice avec Java ~ Créez une zone d'affichage dans la fenêtre
Comment créer un environnement Java en seulement 3 secondes
[Débutant] Créez un jeu compétitif avec des connaissances de base sur Java
J'ai essayé de créer une compétence Clova en Java
Comment créer un URI de données (base64) en Java
Implémentez rapidement singleton avec enum en Java
[Note] Créez un environnement Java à partir de zéro avec docker
Sortie true avec if (a == 1 && a == 2 && a == 3) en Java (identifiant invisible)
Obtenir des informations EXIF en Java
Créer une méthode java [Memo] [java11]
[Java] Créer un fichier temporaire
Rechercher un sous-ensemble en Java
Créez un terrain de jeu avec Xcode 12
Créer des fonctions Azure en Java
Créons une application TODO en Java 11 Gestion des exceptions lors de l'accès à un TODO avec un ID inexistant
J'ai essayé de créer un environnement de développement java8 avec Chocolatey
Créer une méthode pour renvoyer le taux de taxe en Java
Même en Java, je veux afficher true avec un == 1 && a == 2 && a == 3
Créer une classe immuable avec JAVA
Créez un environnement Vue3 avec Docker!
Construire un projet Java avec Gradle
Analyse morphologique en Java avec Kuromoji
3 Implémentez un interpréteur simple en Java
J'ai créé un PDF avec Java.
Créer une base de données dans un environnement de production
Créer une nouvelle application avec Rails
Créer un projet Java à l'aide d'Eclipse
Un exemple simple de rappels en Java
Créer un programme Servlet dans Eclipse
Restez coincé dans un Java Primer
Créez des exceptions avec une interface fluide
Tweak Markdown avec Java flexmark-java
Créez un serveur Web simple avec la bibliothèque standard Java com.sun.net.httpserver
Créons une application TODO en Java 4 Implémentation de la fonction de publication
Créer une SkipList nommée en Java qui ressemble à un ensemble trié redis
Créons une application TODO en Java 6 Implémentation de la fonction de recherche
Créez une énumération haute performance avec des champs et des méthodes comme Java avec JavaScript
Comment créer un nouveau projet Gradle + Java + Jar dans Intellij 2016.03
Créons une application TODO en Java 8 Implémentation des fonctions d'édition
Créons une application TODO avec Java 1 Brève explication de MVC
Créons une application TODO en Java 5 Changer l'affichage de TODO
Représentez graphiquement les informations du capteur de Raspberry Pi en Java et vérifiez-les avec un navigateur Web