2016-11-09 31 views
2

検索のトン後、私は、Javaコードでコマンドを以下の同等のものを作る方法を見つけることができませんでした:p12ファイルからCA証明書をプログラムで取得し、証明書リストを注文しますか?

openssl pkcs12 -cacerts -in /path/to/file.p12 -noout 

このP12または opensslのPKCS12 -clcerts -in /パスから/への唯一のCA証明書を取得します/file.p12 -noout 証明書を取得する

javaでは、これらの証明書はすべてPKCS12キーストアに格納されますが、CA証明書と簡単な証明書は区別できません。どうやってするか ?

私の証明書とそれに署名したN CA証明書を持っています。 CA 2は証明書に署名し、CA 3はCA 2証明書に署名しました... CA NはCA N- 1つの証明書)

2)と同じ方法で、もう一つの問題: (約1を得るために、x509証明書のリストを注文する方法は、あります... CA N)は、私が使用:

CertificateFactory certFact = CertificateFactory.getInstance("X.509"); 
CertPath path = certFact.generateCertPath(myCertifList); 

しかし、リストは私が望んでいたものとは逆の順序になっている必要があります。

3)フルチェーン証明書の注文は保証されていますか? Let's Encryptを使って戦略を変更し、実際の証明書の注文に頼ることができない方法でチェーンとフルチェーンを構築する方法を変更するとどうなりますか? ありがとうございました!

+0

ルートCA証明書は自己署名されています。カスタム自己署名証明書との主な違いは、それらがJavaの信頼できる証明書ストアにリストされていることです。参照[この質問](http:// stackoverflow。com/questions/3508050/how-can-i-get-a-list-of-trusted-root-certificates-in-java)を使用してください。 – Robert

答えて

0

P12が発行される実際の方法は、単一のPrivateKeyと対応するCertificate Chain(一般的なインターネット標準)です。

この詳細については、,Chain of TrustおよびIntermedial CAで読むことができます。

通常、ほとんどの場合、ユーザーの証明書はチェーン内の最初の証明書(最も重要)、最も重要でないもの(サブCAとCA、CAが最後です)が続きます。

ほとんどすべてのソフトウェアとライブラリがこのアプローチに従います。

したがって、証明書チェーンが注文されると言っても差し支えありません(ただし、チェーンが完全ではない、ユーザーの証明書しか持たない、またはCA証明書がサブCAの証明書。これは、P12 /証明書チェーンを発行したCAに大きく依存します。しかし、ユーザーの証明書は最初(0番目)の位置にあります。

チェーンが完全で秩序あるものであることを確認する必要がある場合は、これを行う独自の防御方法を使用することができます。証明書のフィールド(SubjectDNおよびIssuerDN)に基づいて、証明書の種類(CA、SubCAまたはユーザー)を識別できます。 SubjectDNIssuerDNに等しい

場合、それはCA証明書であり、そして、証明書のIssuerDNは、CAのSubjectDNに等しい場合、次の証明書(下位CA)を識別し、それはチェーン内の次であるのでon ..

関連する問題