13

自分で配布せSSL_CTXに、信頼できるCA証明書の妥当なセットを使用してOpenSSLコンテキスト()を設定する方法はありますか?私はそれらを最新の状態に保つ責任を望んでいません。IMOの最新のオペレーティングシステムは、サービスとして「信頼できるCA証明書を取得する」ことを提供する必要がありますが、それが実際に当てはまるかどうかはわかりません。

このコードを3回(Windows用に1回、Mac OS X用に1回、Linux用に1回)記述してもかまいませんが、それを制限したいと思います。特に、インストールされているブラウザを探して信頼できる証明書を抽出しようとするコードを作成しようとはしません。(どうやらこれは非常に間違っているのは簡単です。)

Linuxの最近のバージョンに対する答えは、(そのファイルが存在する場合)で呼び出すことのようSSL_CTX_load_verify_locationsです/etc/ssl/certs/ca-certificates.crt

WindowsとMacOSXの簡単な答えはありますか?

4

3 に答える 3

11

これが私がやったことです:

Windowsの場合:を使用してWindows"ROOT"証明書ストアから証明書を取得し、を使用しCertOpenSystemStoreてループし、のフィールドCertEnumCertificatesInStoreからX509でエンコードされた生の証明書を取得し、を使用してOpenSSL構造を作成し、を使用してOpenSSL証明書ストアに追加します。Windowsの機能はすべてから利用できます。pbCertEncodedCERT_CONTEXTX509d2i_X509X509_STORE_add_certcrypt32.dll

Mac OS Xの場合:を使用してキーチェーンから証明書を"/System/Library/Keychains/SystemRootCertificates.keychain"取得SecKeychainOpenし、を使用してキーチェーン内の証明書のイテレータを作成し、を使用してSecKeychainSearchCreateFromAttributes反復し、を使用しSecKeychainSearchCopyNextて生のX509証明書を取得しSecItemExport、を使用してOpenSSL証明書を作成し、を使用d2i_X509してOpenSSLストアに追加しX509_STORE_add_certます。Macの機能はから利用できます/Systems/Library/Frameworks/Security.framework/Security

X509_STOREより良いアプローチは、すべてをコピーするのではなく、OS関数を使用して個々のルート証明書を検証するコールバックを使用してOpenSSLを作成することですが、私はそれを試していません。

于 2013-10-26T21:36:49.203 に答える
6

OS Xでは、ユーザーのキーチェーンからユーザーが信頼する証明書に関する情報を取得できます。これは、Cocoaを使用してその情報を収集するためのいくつかの非常に優れた情報を含むリンクです。

キーチェーンで証明書を取得する

Cocoaがニーズに適した依存関係ではなく、コマンドラインから直接すべてを実行したい場合は、certtoolユーティリティを参照man certtoolして、他のオンラインドキュメントを使用してそれについて学ぶことができます。ユーザーのログインキーチェーン内のすべての証明書を一覧表示するには、次のようにします。

certtool y k=login.keychain

または、組み込みの信頼できるシステムルートのリストを取得するには:

certtool y k=/System/Library/Keychains/SystemRootCertificates.keychain

そして多分

certtool y k=/System/Library/Keychains/SystemCACertificates.keychain

システムインターフェイスを使用してその情報を取得する方法は他にもあると思います。

Linux側では、そう/etc/ssl/certs/ca-certificates.crtです、正しい方法です。そのファイルは、パッケージがインストールされたときにDebian派生物(Ubuntuバリアントを含む)にca-certificates存在し、redhatベースのシステムで適切にそこに到達する方法がわかりません。

于 2012-04-26T20:30:53.053 に答える
5

リストをMozillaから(Curlのメンテナの回答から)変換するcurlのスクリプトを使用できます。そのコードによると、証明書を含める前に、証明書が信頼できるかどうかを確認しているようです。

于 2012-04-26T20:38:20.797 に答える