6

私はJavaでX509証明書を使用しています。 証明書を指定すると、ルート証明書に達するまで署名階層内の他のすべての証明書を見つけることができますか?証明書チェーンを取得する

証明書ファイル(.cer拡張子)があり、親署名証明書を抽出したいとします。自己署名された最終的なルート証明書を取得するまで、その証明書の親を見つけ続ける必要があります。

私はX509Certificate証明書APIと関連するAPIをjava.security.certにチェックしましたが、役に立たないものは見つかりませんでした。

+1

[既存のリーフ証明書から中間およびルート証明書を生成する方法](http://stackoverflow.com/questions/11076491/how-to-generate-intermediate-and-root-cert-from-既存リーフ証明書) –

+1

これを行う信頼できる方法はありません。 http://stackoverflow.com/a/11076955/47961の回答を参照してください。 –

+1

[java.security.KeyStore#getCertificateChain()](http://docs.oracle.com/javase/6/docs/api /java/security/KeyStore.html#getCertificateChain(java.lang.String))? – Zaki

答えて

2

これは難しいことではありません。何らかの理由で/ out of bandが1つまたは複数のキーチェーンですべての中間証明書とルート証明書を取得していると仮定します。

はちょうどそれを行う切り取らコードの

http://codeautomate.org/blog/2012/02/certificate-validation-using-java/ 

を見てください。キービットはvalidateKeyChain()内にあり、基本的にあなたは中間/ルート証明書を取得する方法にしたよう

cert = cert-to-validate 
    while(not self signed) { 
     extract issuer from cert 
     scan keychain(s) to find cert with a subject equal to the issuer 
     if none found - error 
     check if the signature is correct. 
     cert = issuers_cert 
    } 
    if not at the top/root - error 

で構成されています - それは別の問題です。このコードはちょっと古臭く、クロスサインをよく理解していないことに注意してください。しかし、Java pkixにはBouncyCastleの例があります。

通常、ルート証明書をキーチェーンに作成できます。中間の証明書はしばしば「集められ」、またはより動的に発見される必要があります。これは、一般的に、TLSなどの間にSSLスタックを照会する必要があります。

関連する問題