ユーザーがpkcs12をアップロードできるWebアプリがあります。pkcs12 をバイナリとしてデータベースに保存します。pkcs12 の証明書が自己署名されているか CA 署名されているかを知る方法はありますか?
Tomcat で Java Web アプリを実行しており、openssl を自由に使用できます。
ユーザーがpkcs12をアップロードできるWebアプリがあります。pkcs12 をバイナリとしてデータベースに保存します。pkcs12 の証明書が自己署名されているか CA 署名されているかを知る方法はありますか?
Tomcat で Java Web アプリを実行しており、openssl を自由に使用できます。
次の電子メールスレッドは、base64でエンコードされた証明書(つまりPEM)が自己署名されているかどうかを確認する正しい方法を正確に示しています:http://marc.info/? l = openssl-users&m = 116177485311662&w = 4
コードスニペットは次のとおりです。
openssl verify -CAfile self_signed_cert.pem self_signed_cert.pem
戻る必要があります:
self_signed_cert.pem: OK
または、発行者と件名を比較します。それらが同じである場合、それは自己署名されています
openssl x509 -in cert.pem -inform PEM -noout -subject -issuer
編集:今日、この質問には2つのより良い答えがあります:
しかし、対処すべきもっと重要なことがあると思います。なぜ自己署名証明書について知りたいのでしょうか。目標は何ですか?どのような問題が解決されていますか? おそらく、証明書を自己署名と非自己署名の 2 つの山に分割しようとするのは、ほとんどの状況で間違ったアプローチです。より良いアプローチは、ほとんどの場合、特定の証明書が信頼できる認証局からの有効な署名チェーンを持っていること、および特定の証明書に関連付けられているすべての接続が証明書と一致することを確認することです。
これが私の元の答えの残りの部分です。それはおそらくあなたが望むものではありません。
少しハックですが、このopenssl x509
コマンドは発行者とサブジェクトの両方を報告できます。サブジェクトと発行者が同じ場合、それは自己署名されています。それらが異なる場合は、CA によって署名されています。(厳密に言えば、非常に多くの自己署名証明書は、CA 自身によっても署名されています。)
この理論をテストしながら、いくつかのテストを実行しました。次のように実行されます。
cd /etc/ssl/certs
for f in *.0 ; do openssl x509 -in $f -issuer | head -1 > /tmp/$f.issuer ; openssl x509 -in $f -subject | head -1 > /tmp/$f.subject ; done
cd /tmp
sed -i -e s/issuer=// *.issuer
sed -i -e s/subject=// *.subject
cd /etc/ssl/certs/
for f in *.0 ; do diff -u /tmp/$f.issuer /tmp/$f.subject ; done
お役に立てれば。
BouncyCastle ライブラリを試しましたか?
http://www.bouncycastle.org/wiki/display/JA1/Frequently+Asked+Questions
" 属性証明書、PKCS12、SMIME、および OpenPGP を処理するための特定のサンプル プログラムがあります。これらはパッケージに含まれています。
org.bouncycastle.jce.examples org.bouncycastle.mail.smime.examples org.bouncycastle.openpgp.examples 例のもう 1 つの有用なソースは、テスト パッケージです。
org.bouncycastle.crypto.test org.bouncycastle.jce.provider.test org.bouncycastle.cms.test org.bouncycastle.mail.smime.test org.bouncycastle.openpgp.test org.bouncycastle.cert.test org.bouncycastle. pkcs.test org.bouncycastle.tsp.test "