無効な自己署名SSL証明書-「Subject Alternative Name Missing」


96

最近、Chromeは私の自己署名SSL証明書の使用を停止し、それらは安全ではないと考えています。DevTools | Securityタブで証明書を見ると、それが言うことがわかります

サブジェクトの別名がありませんこのサイトの証明書には、ドメイン名またはIPアドレスを含むサブジェクトの別名拡張が含まれていません。

証明書エラーサイトの証明書チェーン(net :: ERR_CERT_COMMON_NAME_INVALID)に問題があります。

どうすれば修正できますか?


33
これはプログラミングの質問ではないのですが.....スタックの作成の一部である自己署名証明書についてです、、、ありがとう、ブラッド
Sweet Chilly Philly

1
CN=www.example.comおそらく間違っています。ホスト名は常にSANに入ります。CNに存在する場合は、SANにも存在している必要があります(この場合は2回リストする必要があります)。その他のルールと理由については、「証明機関で証明書署名要求に署名する方法」および「opensslで自己署名証明書を作成する方法」を参照してください自己署名証明書を適切なトラストストアに配置する必要もあります。
jww 2017

@jww-これはその質問の複製ではありません。opensslを使用して証明書を作成する必要がないので、他のツールで作成できます。
ブラッドパークス

1
@BradParks-うーん...質問にはOpenSSLのタグが付けられ、受け入れられた回答はOpenSSLを使用しています。OpenSSLタグを再度開いて削除しました。
jww

回答:


104

これを修正opensslするには、証明書を作成するときに、基本的に追加のパラメーターを指定する必要があります。

-sha256 -extfile v3.ext

どこv3.extで、そのようなファイルである%%DOMAIN%%、あなたのように使用と同じ名前に置き換えCommon Name。詳細はこちらこちらをご覧ください。とを、証明書を生成しようCommon Name%%DOMAIN%%しているドメインに設定することに注意してください。つまり、の場合はwww.mysupersite.com、両方に使用します。

v3.ext

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = %%DOMAIN%%

注:この問題に対処し、Chrome、Safari、およびJavaクライアントで使用するための完全に信頼されたssl証明書を作成するスクリプトは、こちらで確認できます

別のメモ:自己署名証明書を表示するときにChromeがエラーをスローしないようにする場合は、特別なコマンドラインオプションを使用してChromeを起動し、すべてのサイトのすべてのSSLエラーを無視することができます。スーパーユーザー


2
使用しているXAMPPのバージョンはわかりませんが、「openssl x509」を含むそのファイルの行を探す場合は、ファイルのその行の最後に上記を追加できるはずです。たとえば、このバージョンのmakecert.batは9行目にあり、次のようになりますbin\openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 365 -sha256 -extfile v3.ext。もちろんv3.ext 、同じフォルダ内のファイルにを保存する必要があります。
ブラッドパークス

1
私はすべてを試した後Chromeをあきらめ、別のブラウザーで続行しました。数日後、今日私はクロムでチェックしましたが、うまくいきました!!! Chromeにはおそらくバグがあり、彼らはそれを修正しました。Subject Alternative Name Missingの方法が機能します!!!! ブラウザーの信頼されたルート証明書の下で証明書を追加するだけです。
Tarik

35
私は取得していますunknown option -extfile。どうすれば修正できますか?
Nick Manning

2
@NickManning-多分あなたはextfile間違ったopensslコマンドでディレクティブを使用していますか?で使用される代わりにopenssl req -new ...、で使用されopenssl x509 -req ...ます。少なくとも、ここで誰かが言ったことはそうです。これこれらの証明書を完全に生成する方法に関する同様の質問に対する別の回答の私が持っている例
Brad Parks

2
「opensslに追加のパラメーターを提供する」具体的にはどのコマンドに?そこ関与する複数のステップがあり、この答えはあまりにもあいまいです:ibm.com/support/knowledgecenter/en/SSWHYP_4.0.0/...
user145400

34

以下の解決策は私のためにChrome 65で動作しました(参照)-

OpenSSL構成ファイルを作成します(例:req.cnf)

[req]
distinguished_name = req_distinguished_name
x509_extensions = v3_req
prompt = no
[req_distinguished_name]
C = US
ST = VA
L = SomeCity
O = MyCompany
OU = MyDivision
CN = www.company.com
[v3_req]
keyUsage = critical, digitalSignature, keyAgreement
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = www.company.com
DNS.2 = company.com
DNS.3 = company.net

この構成ファイルを参照する証明書を作成します

openssl req -x509 -nodes -days 730 -newkey rsa:2048 \
 -keyout cert.key -out cert.pem -config req.cnf -sha256

2
これは素晴らしい!まさに私が必要とするものであり、会社名や州などの煩わしいプロンプトもスキップします。
coredumperror

2
私はそこにいくつかの代替ソリューションを試しましたが、これが私のために働いた唯一のものです。どうも!!
Mirko

1
コマンドラインから件名を渡すことができます:openssl req ... -subj "/C=US/ST=VA/L=SomeCity/O=MyCompany/CN=www.company.com"
JaroslavZárubaJul

どのようにChromeにインポートしましたか?ここにbasicConstraints = CA:true欠けていませんか?
woodz

19

バッシュスクリプト

Chromeで有効な自己署名TLS証明書を簡単に生成できるようにbashスクリプトを作成しました。

テスト済みでChrome 65.x、まだ機能しています。新しい証明書をインストールしたら、必ずChromeを再起動してください。

chrome://restart



その他のリソース

チェックアウトする価値のあるもう1つの(はるかに堅牢な)ツールはCloudFlareのcfsslツールキットです。


2
ここにスクリプトを追加して説明する必要があります。
jww

素敵なスクリプトのようです。しかし、スクリプトは、OPの問題が何であるかに関して(直接)実際の答えを提供しません。多分彼の問題も同様に説明します。
bshea

4

私は単に-subjマシンのIPアドレスを追加するパラメーターを使用します。したがって、1つのコマンドのみで解決されます。

sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -sha256 -subj '/CN=my-domain.com/subjectAltName=DNS.1=192.168.0.222/' -keyout my-domain.key -out my-domain.crt

C、ST、L、O、OU、emailAddressなどの他の属性を追加して、プロンプトが表示されずに証明書を生成できます。


2
動作しません。クロムはSANをこのように認識しないようです
モノノーク2017

このコマンドを使用してOpenSSL 1.1.0bで「証明書要求を行う際の問題」が発生しました。
リック

私(Windows)の場合、少し異なる構文でopenssl.exe req -x509 -sha256 -newkey rsa:2048 -keyout certificate.key -out certificate.crt -days 365 -nodes -subj "/CN=my.domain.com" -addext "subjectAltName=DNS:my.domain.com"*.pfxopenssl.exe pkcs12 -export -out certificate.pfx -inkey certificate.key -in certificate.crt
動作しました。IISに

3

macos / Chromeで自己署名証明書を機能させるには、非常に多くの問題がありました。最後にMkcertを見つけました。「ローカルで信頼された開発証明書を好きな名前で作成できるシンプルなゼロ構成ツールです。」https://github.com/FiloSottile/mkcert


新しいChromeのWindows 10でも動作します。Nginxはこのフォルダーにアクセスできないため、.pemファイルをデフォルトのWindows \ system32フォルダーから別のフォルダーにコピーする必要がありました。
vatavale

2
  • OpenSSL構成のコピーをホームディレクトリに作成します。

    cp /System/Library/OpenSSL/openssl.cnf ~/openssl-temp.cnf
    

    またはLinuxの場合:

    cp /etc/ssl/openssl.cnf ~/openssl-temp.cnf
    
  • にサブジェクトの別名を追加openssl-temp.cnf[v3_ca]ます。

    [ v3_ca ]
    subjectAltName = DNS:localhost
    

    localhost証明書を生成するドメインに置き換えます。

  • 証明書を生成:

    sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
        -config ~/openssl-temp.cnf
        -keyout /path/to/your.key -out /path/to/your.crt
    

次に削除できます openssl-temp.cnf


1

v3.extファイルのDNS.1値を変更することで(net :: ERR_CERT_AUTHORITY_INVALID)を取り除くことができました

[alt_names] DNS.1 = domainname.com

domainname.comを自分のドメインに変更します。


0

上のMAC クロームバージョン67.0.3396.99から始まる私の自己署名証明書は、仕事に停止しました。

ここに書かれているすべての再生は機能しませんでした。

更新

私のアプローチが今日機能することを確認する機会がありました:)。それがうまくいかない場合は、このアプローチを使用していることを確認してください

v3.ext
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = <specify-the-same-common-name-that-you-used-while-generating-csr-in-the-last-step>
$

ここからコピー https://ksearch.wordpress.com/2017/08/22/generate-and-import-a-self-signed-ssl-certificate-on-mac-osx-sierra/

更新を終了

最終的には場合にのみ、緑のセキュアを見ることができた削除から私の証明書をシステム、および追加にそれをローカルのキーチェーン。(存在する場合-最初にドロップしてください)。それが重要かどうかはわかりませんが、私の場合、Chrome経由で証明書をダウンロードし、作成日が今日であることを確認しました。つまり、作成したものです。

誰かが1日のように過ごすのに役立つことを願っています。

Chromeを更新しないでください。


0

Chromeが信頼するIP証明書を作成する非常に簡単な方法を次に示します。

ssl.confファイル...

[ req ]
default_bits       = 4096
distinguished_name = req_distinguished_name
req_extensions     = req_ext
prompt             = no

[ req_distinguished_name ]
commonName                  = 192.168.1.10

[ req_ext ]
subjectAltName = IP:192.168.1.10

もちろん、192.168.1.10はChromeが信頼するローカルネットワークIPです。

証明書を作成します。

openssl genrsa -out key1.pem
openssl req -new -key key1.pem -out csr1.pem -config ssl.conf
openssl x509 -req -days 9999 -in csr1.pem -signkey key1.pem -out cert1.pem -extensions req_ext -extfile ssl.conf
rm csr1.pem

Windowsでは、すべてのクライアントマシンの信頼されたルート証明書ストアに証明書をインポートします。Androidフォンまたはタブレットで証明書をダウンロードしてインストールします。これでChromeはWindowsとAndroidの証明書を信頼します。

Windows開発ボックスでopenssl.exeを取得するのに最適な場所は、「c:\ Program Files \ Git \ usr \ bin \ openssl.exe」です。


0

サーバーlocalhostを実行する場合は、セットアップCN = localhostとが必要DNS.1 = localhostです。

[req]
default_bits = 2048
default_md = sha256
distinguished_name = req_distinguished_name
prompt = no
prompt = no
x509_extensions = v3_req

[req_distinguished_name]
C = BR
CN = localhost
emailAddress=contact@example.com
L = Sao Paulo
O = example.com
OU = example.com
ST = Sao Paulo

[v3_req]
authorityKeyIdentifier = keyid, issuer
basicConstraints = CA:FALSE
extendedKeyUsage = serverAuth
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = localhost
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.