0

このコードを https で実行しようとしています: http://www.codeproject.com/Articles/93301/Implementing-a-Multithreaded-HTTP-HTTPS-Debugging

ページの下部に、makecert.exe を使用して https でこれを実行するには、秘密鍵で新しい証明書を作成する必要があると書かれています。これは著者が使用したコマンドです:

makecert.exe cert.cer -a sha1 -n "CN=matt-dot-net" -sr LocalMachine -ss My -sky signature -pe -len 2048

同じコマンドを実行して、CN をホスト名に変更し、証明書を置き換えました。https サイトにアクセスすると、firefox で警告が表示されます (フィドラーを使用する場合と同じ):

この接続は信頼されていません。リスクを理解しています -> 例外を追加します

そして、私はこのエラーを受け取ります:

このサイトは、無効な情報で自分自身を識別しようとします。間違ったサイト: 証明書が別のサイトに属しており、個人情報の盗難を示している可能性があります。認定機関によって検証されていないため、証明書は信頼されていません。

[Confirm Security Exception] をクリックすると、問題なく動作するようです。

「間違ったサイト証明書」エラーを削除するにはどうすればよいですか? 証明書を間違って生成しましたか? サイトのmakecert.exeの例でわかる限り、秘密鍵は含まれていませんか? ありがとう!

4

3 に答える 3

1

まず、アプリケーションの自己署名証明書 (CA の基本的な制約付き) を生成し (アプリケーションで自動的に生成することができます)、その証明書を信頼できる CA としてブラウザーにインポートできます。

次に、要求されたホスト名に応じて、CA によって発行された新しい証明書をオンザフライで生成できます (つまり、秘密鍵を使用して CA のサブジェクト DN を新しい証明書の発行者 DN として署名します)。この質問には、C# での証明書の生成に関する詳細があります。C# のみを使用して X509 証明書をプログラムで生成することは可能ですか?

この証明書は、HTTP over TLS 仕様の仕様に従っている必要があります。

タイプ dNSName の subjectAltName 拡張が存在する場合、それを ID として使用する必要があります。それ以外の場合は、証明書の Subject フィールドの (最も具体的な) Common Name フィールドを使用する必要があります。Common Name の使用は既存の慣行ですが、推奨されておらず、証明機関は代わりに dNSName を使用することをお勧めします。

[...]

場合によっては、URI がホスト名ではなく IP アドレスとして指定されます。この場合、iPAddress subjectAltName が証明書に存在し、URI の IP と正確に一致する必要があります。

要するに、要求されたのがホスト名だけの場合はCN=hostname、サブジェクト DN に RDN を入力するだけで問題ありませんが (ただし、サブジェクトの代替名の方がよいでしょう)、IP アドレスの場合は、IP アドレスのサブジェクトの代替を入力する必要があります。名前の入力 (一部のブラウザーでは、実際には CN RDN の IP アドレスを使用できます)。

サーバー名を示さずに TCP パケットをキャプチャするプロキシが必要な場合は、実際に要求されている実際のホスト名を見つけるのが非常に難しい場合があります。IPアドレスのリバースDNSルックアップを実行し(見つけることができるはずです)、リバースDNSエントリごとにDNSサブジェクト代替名エントリと、IPアドレスのIPサブジェクト代替名エントリを配置することをお勧めします. これは、IP アドレスが逆引き DNS エントリを持たないホスト名をクライアントが使用する場合を除いて、ほとんどの場合をカバーするはずです。それができない場合は、ブラウザに手動で例外を追加するか (自分の通信を傍受していることがわかるので問題ありません)、プロキシ内で手動で設定する必要があります。

ホスト名を推測する必要がないため、ブラウザーで構成された HTTP プロキシを使用すると、ホスト名を簡単に見つけることができます。ホスト名はCONNECTHTTP 動詞に渡されます。

(もちろん、まず、特定のホストに対して、makecertその場で行うのではなく、証明書を生成できます。)

于 2012-02-02T01:55:58.243 に答える
0

あなたの自己署名証明書はサイトで使用されているものであり、自己署名証明書は信頼されていないため、VeriSign などから購入してメッセージを消す必要があると思います。

于 2012-02-02T01:40:43.217 に答える
0

証明書名をホスト名と同じにします。つまり、stackoverflow.com の場合は「stackoverflow」とします。

于 2012-02-02T01:46:28.143 に答える