web-dev-qa-db-ja.com

証明書が自己署名かCA署名かを確認する

ユーザーがpkcs12をアップロードできるWebアプリがあります。 pkcs12をバイナリとしてデータベースに保存します。 pkcs12の証明書が自己署名かCA署名かを知る方法はありますか?

Java WebアプリケーションをTomcatで実行しており、opensslを自由に使用できます。

18
Nishan

少しハッキーですが、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

お役に立てれば。

11
sarnold

次の電子メールスレッドは、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
13
NitinB

ここで受け入れられた答えは厳密には正しくありません。古い質問ですが、これは「証明書が自己署名されているかどうかを確認する方法」に対するGoogleの最初の結果なので、クリアする必要があります。

発行者とサブジェクトが一致する場合、証明書はほとんど常に自己署名されますが、保証はされません。証明書は「自己発行」することができ、発行者/サブジェクトは同じですが、証明書の公開鍵とペアになっていない秘密鍵で署名されています。

上記のNitinBからの回答の最初の部分は、自己署名証明書を確認する正しい方法です。

openssl verify -CAfile self_signed_cert.pem self_signed_cert.pem

「すべての自己署名証明書は自己発行ですが、すべての自己発行証明書が自己署名されるわけではありません。」

引用: https://tools.ietf.org/html/rfc528

「自己発行の証明書は、発行者とサブジェクトが同じエンティティであるCA証明書です。自己発行の証明書は、ポリシーまたは操作の変更をサポートするために生成されます。自己署名の証明書は、デジタル署名が証明書にバインドされた公開鍵。」

1
mattjm

BouncyCastle libを試しましたか?

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 "

0
user1352498

Javaはnable分析するにはPKCS12そのため、opensslを使用してkeystoreに変換する必要があります。

ここで、キーストアにはプライベートキーとX509証明書の両方があります(または、証明書の保存のみを選択できます)。次に、標準のJava APIを使用してkeystoreから発行者を取得し、発行者を手動で確認します。

0
frogcdcn