12

アプリのUbuntuサーバーからAppleのプッシュ通知サービスに接続しようとしています。使用しているpyAPNSプロバイダーに必要な結合された.pem証明書を正常に生成しました。ただし、で証明書を検証しようとするとopenssl verify、が表示されますerror 20 at 0 depth lookup:unable to get local issuer certificate。認証局を明示的に指定すると機能しますが( )、ここで説明されているように、「システム全体の認証局データベースへの証明書のインポート」で、私が理解している限りopenssl verify apns.pem -CAfile entrust_2048_ca.pem、Entrust証明書をシステムに明示的にインストールしています。このページでは、すべてが正常です(証明書は/ usr / lib / ssl / certsにあり、ハッシュとのシンボリックリンクがあります)。

を使用してAPNS自体に接続しようとすると、同じことが起こりopenssl s_clientます。CAfileを明示的に指定した場合は接続に問題がないようですが、そうでない場合は接続できません。PyAPNSは、APNSサーバーに接続できないと言っていますが、同じ理由でしか推測できません。

毎回明示的に指定せずに、OpenSSLにデフォルトでEntrust認証局を認識させるにはどうすればよいですか?私はどこかで一歩を逃していますか?

4

1 に答える 1

16

OpenSSL は、証明書の発行者 DN のハッシュを使用して、CA 証明書がインストールされているデフォルト ディレクトリ内のファイルを検索します。

OpenSSLverifyのドキュメントを参照してください。

-CApath ディレクトリ

信頼できる証明書のディレクトリ。証明書には、hash.0 の形式の名前を付けるか、この形式の証明書へのシンボリック リンクを含める必要があります (「hash」は、ハッシュされた証明書のサブジェクト名です。x509 ユーティリティの -hash オプションを参照してください)。Unix では、c_rehash スクリプトは、証明書のディレクトリへのシンボリック リンクを自動的に作成します。

これらのハッシュ値は、各 CA 証明書のサブジェクト DN から取得されます (検証する証明書の発行者と一致するサブジェクトを持つ CA 証明書を探すことが目的であるため)。文書化されているとおりに使用するかc_rehash、または を使用してサブジェクト DN のハッシュを取得し、openssl x509 -subject_hash -noout -in cacert.pemそれに応じてファイル/リンクの名前を変更することができます。

検証する証明書の直接の発行者は、ルート CA 証明書ではない可能性があります。チェーンに中間 CA 証明書が存在する可能性があります。また、中間証明書が使用されていることを確認する必要があります。

さらに、2 つの異なるハッシュ形式があります (OpenSSL バージョン 1.0 から変更がありました)。OpenSSL 自体はデフォルトで新しい形式のみを使用する必要がありますが、-subject_hash_oldとの両方を使用してリンクを作成する価値があります。-subject_hash

于 2012-08-20T17:25:34.333 に答える