web-dev-qa-db-ja.com

ローカルホストの自己署名SSL証明書、信頼できるものにする方法

127.0.0.1:5555を介してWebAPIサービスを提供するOwinセルフホストC#アプリがあります(ローカルホストでのみリッスンし、外部接続はありません)。

これらのWebAPIサービスは、AngularJSアプリからAjaxを使用して呼び出されます。余談ですが、Owinアプリの理由は、ハードウェアとの特定の対話が必要であるためです。これは、ブラウザー内からは不可能です。また、AngularJSアプリは内部で使用するため、使用するブラウザーを制御できます。

上記はHTTPで非常にうまく機能しますが、Angular JSアプリはSSLを使用する必要があります。これは、OwinアプリもSSLを使用しない限り機能しません(そうしないと、「混合コンテンツ」エラーが発生します)。

AngularJSアプリの公式証明書を購入し、Owinlocalhostのものに自己署名証明書を使用しています。

問題は、Owin Web APIと通信しているときに、AngularJSアプリから「NET :: ERR_CERT_AUTHORITY_INVALID」(Chromeからテストインする場合)と「net :: ERR_INSECURE_RESPONSE」を取得することです。

これが私が大まかに行ったことです:

CentOSボックスを使用してローカルホストの証明書を生成し、pkcs12/pfx形式にエクスポートしました。また、CA証明書を生成し、同じ方法でエクスポートしました。

MMCを使用して、Angular&Owinアプリを実行しているWindows 7マシンのローカルホスト証明書を証明書(ローカルコンピューター)>パーソナル>証明書にインポートしました。

また、Windows 7マシンのCA証明書を[証明書(ローカルコンピューター)]> [信頼されたルート証明の認証局]> [証明書]にインポートしました

ローカルホスト証明書を見ると、「発行先:localhost」、発行元:「ca.acme.com」、「この証明書に対応する秘密鍵があります」、(認証パスの下)「この証明書はOKです」と表示されます。

CA証明書には、「発行先:ca.acme.com」、発行元:「ca.acme.com」、「この証明書に対応する秘密鍵があります」、(認証パスの下)「この証明書はOKです」と記載されています。

netsh http show sslcert

IP:port                 : 127.0.0.1:5555 
Certificate Hash        : 1234555555555555555555511155555555555555
Application ID          : {1234a123-1234-1234-1234-123412341234} 
Certificate Store Name  : (null) 
Verify Client Certificate Revocation    : Enabled
Verify Revocation Using Cached Client Certificate Only    : Disabled
Usage Check    : Enabled
Revocation Freshness Time : 0 
URL Retrieval Timeout   : 0 
Ctl Identifier          : (null) 
Ctl Store Name          : (null) 
DS Mapper Usage    : Disabled
Negotiate Client Certificate    : Disabled

何が足りないのですか? ChromeなどにローカルホストのSSL証明書を信頼させるにはどうすればよいですか?

9
Lars335

私はこれを機能させました(少なくとも私の現在のニーズには十分です)。

ローカルホスト証明書を「証明書(ローカルコンピューター)>パーソナル>証明書」から「証明書(現在のユーザー)>パーソナル>証明書」にコピーしました。これにより、Chrome(および "NET :: ERR_CERT_AUTHORITY_INVALID"メッセージ)のhttpsの赤い取り消し線と、AngularJSの "net :: ERR_INSECURE_RESPONSE"エラーが削除されました。

私の場合、ローカルホスト証明書はローカルコンピューターストアと現在のユーザーストアの両方に存在する必要があることに注意してください。そうでない場合、ポート5555(Owinアプリの場合)にバインドするためのnetshコマンドは失敗します。

netsh http add sslcert ipport=127.0.0.1:5555 certhash=1234555555555555555555511155555555555555 appid={1234a123-1234-1234-1234-123412341234}

SSL Certificate add failed, Error: 1312, A specified logon session does not exist. It may already have been terminated.

Chrome(Chrome $ ===)にはまだ素敵な緑の南京錠がありません(パッドロックに黄色の小さな三角形があります。 "このウェブサイトのIDはca.acme.comによって確認されていますが、公開監査記録」)が、これはWeb API通信に干渉しないように思われるので、問題ないはずです。

警告なしですべてをグリーンでニースにする簡単な方法を誰かが知っているなら、私はまだ興味がありますが、それは重要ではありません。

6
Lars335

Linuxではapt-gt install libnss3-tools

Libnss3-toolsを使用すると、certutilを取得できます

ここで、キーコマンド:

certutil -d sql:$HOME/.pki/nssdb -A -t "CP,CP," -n <your alias> -i <your crt-file to import>

これにより、Raspberry/LinuxでのChrome

0
Mike Mitterer