web-dev-qa-db-ja.com

自己署名証明書を使用したローカルHTTPトラフィックの暗号化

過去数時間、私は自分のホームネットワーク上のコンピューターとサーバー間のHTTPトラフィックを暗号化するために使用したい自己署名証明書を作成しようと試みてきました(私はそのように偏執的であるため)。ただし、Webブラウザーでセキュリティ警告が表示され続けるため、これを正しく実行しているかどうかはわかりません。特にGoogle Chromeは私がやっていることを気に入らない。

うまくいけば、より経験豊富な誰かがガイダンスを提供できるでしょう。

私のサーバー(Synology DiskStation)には、内部的に(ローカルIPアドレスまたはホスト名を介して)、またはインターネットを介して(パブリックIPアドレスまたはDNS名を介して)到達できます。残念ながら、パブリックIPアドレスは動的です。ただし、私のサーバーで実行されているサービスは、60分ごとにDNSエントリを更新します。

私がやったことは、OpenSSLを使用して自己署名X.509証明書を生成したことです(大部分のデフォルト設定を使用)。以前のテスト中に、サーバーに内部的にアクセスするときにさらに多くのセキュリティ警告が発生することがわかったため、CN(共通名)を指定しませんでした。代わりに、subjectAltName拡張フィールドにDNS名、ホスト名、ローカルIPアドレスを含めました。

サーバーの証明書は次のようになります。 https://dl.dropbox.com/u/14454764/cert.crt

次に、この証明書をWindowsマシンの信頼されたルート証明機関の証明書ストアにインストールしました。 HTTPSを使用してWebサーバーにアクセスできるようになりましたが、警告は出されません。

エラーには次のものがあります。

  • (グーグルクローム) Server's certificate does not match the URL.(ホスト名を使用する場合)
  • (グーグルクローム) The identity of this website has not been verified.(ローカルIPを使用する場合)
  • (インターネットエクスプローラ) The security certificate presented by this website was issued for a different website's address.(ローカルIPを使用する場合)

これらの警告は、ブラウザを再起動すると必ず返されます。インターネットから(DNS名を使用して)Webサーバーにアクセスした場合、私のブラウザーはどれも文句を言わず、すべてが正常です。

このようなエラーを引き起こさない内部使用の証明書を生成できますか?どうぞよろしくお願いいたします。

13
Steven Liekens

サーバーへのSSLアクセスを行う場合、クライアントは次の検証を実行します。

  1. クライアントは、クライアント(ブラウザ)に埋め込まれている「ルートCA」とも呼ばれるローカルの「トラストアンカー」に関して証明書を検証します。またはオペレーティングシステム)。検証とは、トラストアンカーからSSLサーバーの証明書までの一連の証明書を構築することです。各証明書は次に署名します。アルゴリズムの詳細は少し複雑です( RFC 528 のセクション6)。

  2. クライアントは、目的のサーバーのnameがサーバーの証明書に含まれていることを確認します(検証により、サーバーの有効な証明書であることが確認されます。この手順はそれがthe正しいサーバーであることを確認することについて、他のものではありません)。このステップは RFC 2818 で説明されています。

最初のステップでは、自己署名証明書を有効として受け入れる必要があることをクライアントシステムに通知する必要があります。あなたがInternet Explorerについて話しているので、私はWindowsオペレーティングシステムを推測します。方法については この回答 を参照してください(ChromeもOSトラストストアを使用しているため、Chromeでも修正される可能性があります)。

2番目のステップでは、タイプdNSNameの名前と一致する(IPアドレスではなく)サーバー名のURLを使用する必要があります。証明書のSubject Alt Name拡張子に表示されます(その拡張子にdNSNameがない場合、または拡張子がまったくない場合は、subjectDNフィールドにCommon Nameが表示されます使用されている)。 URLが次のようになっている場合:

https://www.example.com/path/to/whatever.html

次に、ブラウザは証明書でwww.example.comを見つけようとします。もしそれが見つけられないなら、あなたが経験するように、あなたは恐ろしい警告の原因となるでしょう。

ネットワークの場所に関係なく同じ名前を使用できるように、DNS設定を少し変更する必要がある場合があります。 nameマッチングであることを忘れないでください。IPアドレスでは機能しません。また、Subject Alt Name拡張子にタイプdNSNameseveral名を置くことができることに注意してください。これは、SSLサーバーに役立ちます。複数の名前で連絡する人。

7
Thomas Pornin