Java read CSR V3 Расширения - PullRequest
0 голосов
/ 31 марта 2019

Я сгенерировал запрос подписи сертификата (CSR), используя инструмент https://certificatetools.com/newui/, и теперь я хочу прочитать все поля, включая расширения.

Например, используя google.com в инструменте в качестве примера, он генерирует следующий CSR:

Certificate Request:
    Data:
        Version: 1 (0x0)
        Subject: CN = *.google.com, C = US, ST = California, L = Mountain View, O = Google LLC
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:e3:b5:a0:d8:........
                Exponent: 65537 (0x10001)
        Attributes:
        Requested Extensions:
            X509v3 Key Usage: critical
                Digital Signature
            X509v3 Extended Key Usage: 
                TLS Web Server Authentication
            X509v3 Basic Constraints: critical
                CA:FALSE
            X509v3 Subject Alternative Name: 
                DNS:*.google.com, DNS:*.android.com, DNS:*.appengine.google.com, DNS:*.cloud.google.com, ...............
    Signature Algorithm: sha256WithRSAEncryption
         44:a0:41:41:88:66:......

В настоящее время я читаю CSR следующим образом:

    FileReader fileReader = new FileReader("/..../cert.csr");
    PemReader pemReader = new PemReader(fileReader);

    PKCS10CertificationRequest csr =
            new PKCS10CertificationRequest(pemReader.readPemObject().getContent());

    StringWriter writer = new StringWriter();
    PemWriter pemWriter = new PemWriter(writer);
    pemWriter.writeObject(new PemObject("CERTIFICATE REQUEST", csr.getEncoded()));
    pemWriter.flush();
    pemWriter.close();
    String csrPEM = writer.toString();

    System.out.println(csrPEM);
    System.out.println("SUBJECT: " + csr.getSubject().toString());

Как прочитать остальные поля (например, расширенное использование ключа X509v3)?

Спасибо.

1 Ответ

0 голосов
/ 31 марта 2019

В настоящее время так я читаю детали CSR в моей java-программе, которая работает очень хорошо. Я читаю это для получения пользовательского uuid.

ByteArrayInputStream bais = new ByteArrayInputStream(csr);
CertificateRequest p10CertReq = new CertificateRequest(bais);
Name userDN = p10CertReq.getSubject();
String user = userDN.getRFC2253String();

iaik.pkcs.pkcs10.CertificateRequest объект предоставляет метод getAttribute, который можно использовать для получения атрибутов

...