2017-01-29 22 views
1

ルートCA証明書とサーバー証明書の間に中間証明書を持つサーバーのSSL証明書を確認します。Pythonでルート証明書なしでSSL証明書を確認する方法は?

証明書を検証するために「要求」と「httplib」パッケージを試した場合は、ルート証明書にパス(または「要求」の場合は「REQUESTS_CA_BUNDLE」環境変数を更新)を入力すると、両方が成功します。

ただし、サーバー証明書または中間証明書へのパスのみを指定すると、検証は失敗します。私は、「要求」や「httplib」やPythonの他のパッケージが、ルートCA証明書に戻ってトレースすることなく、サーバー証明書または中間CA証明書だけでSSL証明書を正常に検証できる方法があるのだろうか?

Pythonで扱いにくい場合は、opensslなどのLinuxツールで同じことが可能ですか?

答えて

2

Pythonでルート証明書なしでSSL証明書を確認するにはどうすればよいですか?

ルートCAではなく、下位CAのいずれかを使用して、証明書チェーンを検証できます。これは経路構築と呼ばれ、RFC that covers the techniqueがあります。

エンドエンティティサーバー証明書を直接使用することもできます。ルートCAまたは下位CAではなく、その信頼を根絶してください。

ルートCAまたは下位CAを使用できない場合は、別のスキームに移行する必要があります。


これは直接あなたの質問に答える...あなたができることの一つはpin the host's public keyで、全体PKIやPKIX機械をあきらめることはありません。

key distribution problemも適用され、サイドステップはありません。 PKIXでは、CAのルート証明書が必要です。固定するときは、ホストの公開鍵を知る必要があります。

先験的にホストの公開鍵についてのの知識がない場合は、Trust On First Useスキームに移動できます。それはツールCertPatrolのような道具に似ています。

ピニングは、エンタープライズアプリケーションに適しています。エンタープライズでは、組織が独自の証明書を発行するため、公開鍵が手元にあるかどうかがわかります。彼らは、独自のプライベートPKIを実行することさえできます。組織は情報を先験的にと知っているので、アプリケーションには必要な証明書が組み込まれています。最初の使用については信頼する必要はありません。

重要なメモ... RFC 7469, Public Key Pinning Extension for HTTPは重大な欠陥があります。最も有害なのは、(1)攻撃者が既知の良いピンセットを壊すことができるオーバーライド、 (2)ピンセットが破損した場合、エラー報告は無効になります。 RFCは、セキュリティ上の考慮事項を列挙するのには適していません。

Peter GutmannのEngineering Securityも参照してください。彼はこれらすべてのことについて話します。


の要求 'とも 'httplib' パッケージを試してみました場合は...

残念ながら、私は残念ながら、これらのことを実行する必要があるライブラリはありません。利用可能なライブラリはありません。

+0

私は、私は非常に少しの知識を持っているにあなたが言及している多くのものがある主な理由は、今のように答えとしてあなたの答えを受け入れることができないので、私はあなたの提案を試してみることができます前に、それはいくつかの時間がかかります。しかし、私は間違いなくすべての貴重な点についてあなたの答えを投票しています。ありがとうございました:) – akash12300

+2

@ akash12300 - 心配しないでください。あなたは深刻なセキュリティ工学の問題に直面しています。グットマンの本を読んでください。そして、あまりにも早く答えを受け入れないでください。人々が答える時間を許してください。あなたはもっと良いものが来るかもしれません。 – jww