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証明書を信頼させるにはどうすればよいですか?
私はこれを機能させました(少なくとも私の現在のニーズには十分です)。
ローカルホスト証明書を「証明書(ローカルコンピューター)>パーソナル>証明書」から「証明書(現在のユーザー)>パーソナル>証明書」にコピーしました。これにより、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通信に干渉しないように思われるので、問題ないはずです。
警告なしですべてをグリーンでニースにする簡単な方法を誰かが知っているなら、私はまだ興味がありますが、それは重要ではありません。
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