2016-10-22 53 views
0

Javaで弾む城を使ってpkcs10リクエストに署名しようとしています。結果として得られる証明書は、双方向SSLシナリオで使用されます。私はを通じて見て、この上の例や他のサイトの多くを試してみましたが、私はいつも、サーバーに私のクライアントを接続しようとすると、次を得る終わるました:bouncy castle openssl pkcs10証明書署名コマンドに相当します。

--java--

org.springframework.web.client.ResourceAccessException: 
I/O error on GET request for "https://localhost:8443/resources/1": 
Received fatal alert: certificate_unknown; 
nested exception is javax.net.ssl.SSLHandshakeException: 
Received fatal alert: certificate_unknown 

--openssl--

$ openssl s_client -connect localhost:8443 -CAfile ca.crt -cert client.crt -key client.key -pass pass:password -showcerts 
CONNECTED(00000003) 
depth=1 /C=xx/ST=xx/L=xx/O=xxxx/OU=xxxx/CN=xxxx/[email protected] 
verify return:1 
depth=0 /C=xx/ST=xx/L=xx/O=xxxx/OU=xxxx/CN=localhost/[email protected] 
verify return:1 
76234:error:14094416:SSL routines:SSL3_READ_BYTES:sslv3 alert certificate unknown: 
/BuildRoot/Library/Caches/com.apple.xbs/Sources/OpenSSL098/OpenSSL098 
-59.40.2/src/ssl/s3_pkt.c:1145:SSL alert number 46 
76234:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure: 
/BuildRoot/Library/Caches/com.apple.xbs/Sources/OpenSSL098/OpenSSL098-59.40.2/src/ssl/s23_lib.c:185: 

私は快活城と多くの試みがなされてきたが、ここでは単に例として、一つの試みである:

public Certificate signCertificateSigningRequest(PKCS10CertificationRequest certificationRequest, 
     Certificate caCertificate, PrivateKey caPrivateKey) throws Exception { 
    X500Name issuer = getX500Name("xxxx"); 
    Calendar notBefore = Calendar.getInstance(); 
    notBefore.add(Calendar.DATE, -1); 
    Calendar notAfter = Calendar.getInstance(); 
    notAfter.add(Calendar.YEAR, 3); 
    X509v3CertificateBuilder certGen = new X509v3CertificateBuilder(
     issuer, 
     BigInteger.valueOf(3), 
     notBefore.getTime(), 
     notAfter.getTime(), 
     certificationRequest.getSubject(), 
     certificationRequest.getSubjectPublicKeyInfo() 
    ); 
    X509CertificateHolder certHolder = certGen 
     .build(new JcaContentSignerBuilder("SHA256withRSA").setProvider("BC").build(caPrivateKey)); 
    X509Certificate certificate = new JcaX509CertificateConverter().setProvider("BC").getCertificate(certHolder); 
    return certificate; 
} 
は、これは私にナットを駆動されています

$ openssl \ 
x509 \ 
-req \ 
-in client.csr \ 
-CA ca.crt \ 
-CAkey ca.key \ 
-passin pass:password \ 
-CAcreateserial \ 
-sha256 \ 
-out client.crt \ 
-days 3650 

:私が望む何

は、私が作品を知って、次のopensslコマンドの快活なお城と同等です。どんな助けでも大歓迎です。ありがとう。

答えて

1

私はここで答えを見つけました:X509 certificate signed with bouncy castle is not valid

答えがX509v3CertificateBuilderに与えられた発行者としなければなりませんでした。 getX500Name( "xxxx")による発行者の返品は、証明書を生成した発行者と同一でなければなりませんが、そうではないと思います。

X500Name issuer = getX500Name("xxxx"); 

に:私は変更しなければならなかった

X500Name issuer = X500Name.getInstance(((X509Certificate)caCertificate).getSubjectX500Principal().getEncoded()); 

今では正常に動作します。

関連する問題