5

X.509 証明書の使用を開始したばかりです。Linuxで証明書を検証する方法を教えてもらえますか? ユースケースは、アプリが以前のセッションで証明書をダウンロードし、新しいセッションを開始する前に、証明書がまだ有効かどうか (つまり、保存されてから期限切れになっていないか、取り消されていないか) を確認する必要がある場合です。ここで完全なサンプルを提供できないことは理解していますが、ポインタは役に立ちます。

編集: さらに調査した結果、Network Security Services (NSS) と呼ばれる別のユーティリティが明らかになりました。使いやすさの点で OpenSSL と比較してどうですか? また、コマンド ライン ユーティリティを起動できないため、プログラムによる解決策を探しています。

4

3 に答える 3

19

他の人が述べたように、あなたはを使うことができますopenssl verifyドキュメントによると、有効期間もチェックします。

プログラム的には、ちょっと悪い(または欠落している)ドキュメントを検索し、Web全体でコード例を読んで、おそらく頭痛の種になる可能性があります。

証明書を適切に検証するには、すべての中間証明書に通知する必要があります。通常は失効リスト(CRL)も通知しますが、必須ではありません。

したがって、コード(OpenSSL)に関して行う必要があることは次のとおりです。

  1. X509_STORE_new-証​​明書ストアを作成します。
  2. X509_STORE_CTX_new-ストアコンテキストを作成します。
  3. X509_STORE_add_cert-CA(およびすべての中間)証明書を証明書ストアの信頼できるリストに追加します(注:リストを検索/ロードする機能があります)。
  4. X509_STORE_add_crl-失効した証明書を証明書ストアのCRLに追加します(注:上記と同じ)。
  5. X509_STORE_CTX_init-証​​明書ストアに通知するストアコンテキストを初期化します。
  6. X509_STORE_CTX_set_purpose-必要に応じて目的を定義します。
  7. X509_STORE_CTX_set_cert-検証する証明書をコンテキストに伝えます。
  8. X509_verify_cert-最後に、それを検証します。
  9. X509_STORE_CTX_cleanup-コンテキストを再利用して別の証明書を検証する場合は、コンテキストをクリーンアップして(5)に戻ります。
  10. 最後になりましたが、(1)と(2)の割り当てを解除します。

または、を使用して簡単な検証を行うこともできますX509_verify。ただし、署名のみを比較することに注意してください。

必要なときに、検索、読み取り、テストに1日かかりました。次に、必要なものがすべてOpenSSLソースコードに含まれていることがわかりました。したがって、例が必要な場合は、openssl-xxx / apps/verify.cに直接アクセスしてください。

重要: MD5は絶対に使用しないでください。理由を理解するには、「不正なCA証明書の作成」を参照してください。

于 2010-07-27T12:59:39.977 に答える
3

openssl verify will do what you want, if you want a simple tool:

From running:

cd /usr/share/ca-certificates
find . -type f -exec openssl -verify {} \;

Here's a selection of the output:

./telesec.de/deutsche-telekom-root-ca-2.crt: OK
./brasil.gov.br/brasil.gov.br.crt: OK
./cacert.org/cacert.org.crt: OK
./spi-inc.org/spi-ca-2003.crt: /C=US/ST=Indiana/L=Indianapolis/O=Software in the Public Interest/OU=hostmaster/CN=Certification Authority/emailAddress=hostmaster@spi-inc.org
error 10 at 0 depth lookup:certificate has expired
OK
./spi-inc.org/spi-cacert-2008.crt: OK
./signet.pl/signet_ocspklasa3_pem.crt: /C=PL/O=TP Internet Sp. z o.o./CN=CC Signet - CA Klasa 3/serialNumber=Numer wpisu: 4
error 2 at 1 depth lookup:unable to get issuer certificate
./signet.pl/signet_ca3_pem.crt: /C=PL/O=TP Internet Sp. z o.o./CN=CC Signet - CA Klasa 3/serialNumber=Numer wpisu: 4
error 20 at 0 depth lookup:unable to get local issuer certificate

If you'd rather have the results in a larger program, perhaps the gnutls_x509_crt_verify(3), gnutls_x509_crt_get_key_usage(3), gnutls_x509_crt_check_revocation(3) interfaces are easier to use than OpenSSL. (I've never used gnutls, but I have used OpenSSL.)

于 2010-07-20T10:09:04.307 に答える
0

OCSPは、証明書の失効をチェックするためのプロトコルです。Openssl は、証明書チェーンの検証と署名検証 API を提供します。ある程度のコーディングが必要です。したがって、 Opensslドキュメントを調べることをお勧めします。

マシンに既に保存されているはずのルート証明書に到達するまで、証明書チェーンを渡して検証する必要があります。これは、ルート CA (認証局) と呼ばれるエンティティによって発行された自己署名証明書です。

OCSP とは別に、失効リスト、つまり CRL を取得し、そのリストを解析して証明書 ID を取得する必要がある古い方法があります。

編集:同じ機能を実行するopensslコマンドラインユーティリティについて言及するのを忘れていました。

于 2010-07-20T10:06:17.517 に答える