web-dev-qa-db-ja.com

ChromeデスクトップおよびAndroidは信頼できる自己署名証明書の受け入れを拒否します

OpenSSL 1.1.1bを使用して、次のコマンドで自己署名証明書を作成しました(2019年2月26日)。

openssl req -nodes -new --days 900 -subj /CN=192.168.0.104:8080 -x509 -keyout server.key -out server.crt

次に、Windowsを使用しました mmc 結果のserver.crtをコンソールルートにインポートしました->証明書-現在のユーザー->信頼されたルート証明機関->証明書

chrome tho at 192.168.0.104:8080のページに移動すると、ページが「安全ではない」と表示されます(証明書情報を確認するとパスには「この証明書は問題ありません」と表示されます。

私はAndroid電話で同様のプロセスを行い、それを私の電話にアップロードし、暗号化と認証情報の設定セクションで証明書を追加しました。

しかし、ページに移動すると、「サーバーの証明書がURLと一致しません」と表示されます。

ここで何が悪いのですか?

更新:

現在req.confを使用しています

[req]
distinguished_name = req_distinguished_name
x509_extensions = v3_req
Prompt = no
[req_distinguished_name]
C = US
ST = CA
L = Belmont
O = N/A
OU = N/A
CN = 192.168.0.104
[v3_req]
subjectAltName = @alt_names
[alt_names]
DNS.0 = localhost
IP.0 = 192.168.0.104

そして、証明書とキーを作成します:

openssl req -x509 -nodes -days 999 -newkey rsa:2048 -keyout server.key -out server.crt -config req.conf

次に、WindowsでChromeを再起動しました(2019年も、設定を有効にするためにプログラムを再起動する必要があるとは思えません)。 Windows chromeすると、問題なく認識されます。

ただし、Androidでは、この証明書をインストールすることもできません。「証明書のインストールに必要な秘密鍵」と表示されます。これはさらに混乱します。

2
B T
  1. ChromeにはSANが必要です。2年間、Chromeは証明書でSe​​rver Alternative Name(SAN)拡張機能を使用しています、前世紀に使用されたサブジェクトのCommonName(CN)属性ではありません。(他のブラウザ、TTBOMKすべて、および今日のほとんどすべてのクライアントpreferSANですが、サブジェクトにフォールバックします必要に応じてCN、Chromeは使用できません。)OpenSSL構成ファイルの内容や使用しているバージョンを指定しないでください。OpenSSL1.1.1にはコマンドラインオプション_-addext_から_req -new -x509_まで。ただし、それ以外の場合は、設定ファイルでSANを少なくとも論理的に設定する必要があります。ただし、Unixでは、IbelieveWSL、<(commands)(またはzsh =(commands))を使用して、シェルにその構成ファイルを自動一時ファイルとして作成させることができます。以下を参照してください。

Chrome 58 で機能するopensslを使用した自己署名証明書の生成
「net :: ERR_CERT_COMMON_NAME_INVALID」エラーを解消できませんchrome自己署名証明書付き
https://security.stackexchange.com/questions/172440/generate-x509-err-cert-common-name-invalid
https://security.stackexchange.com/questions/74345/provide-subjectaltname-to-openssl-directly-on-command-line
https://security.stackexchange.com/questions/158632/burp-suite-although-my-configurations-are-correct-still-chrome-doesnt-allows

ただし、これらのQは、SANエントリタイプDNSを使用するドメイン名の証明書に関するものです。IPadddressの場合は、代わりにIPを使用する必要があります。

  1. ポートを省略します。サブジェクトCNをまだ使用しているブラウザ/クライアントであっても、ホスト名またはIPアドレスなしポート。 (SANの場合、SAN構文onlyがDNS:dommainnameまたはIP:IPv4or8addr、ポートなし)

PS:通常、8080は代替HTTPに使用され、8443は代替HTTPSに使用されます。 HTTPSに8080を使用すると混乱を招きます。

3