ドメインとサブドメインの自己署名証明書の作成-NET :: ERR_CERT_COMMON_NAME_INVALID


82

このチュートリアルに従って、開発目的でWindowsで署名付きSSL証明書を作成しましたが、ドメインの1つでうまく機能しました(DNSをシミュレートするためにhostsファイルを使用しています)。それから私は私がたくさんのサブドメインを持っていると思いました、そしてそれはそれらのそれぞれのために証明書を作成するためのお尻の苦痛でしょう。そこでCommon、serverfaultでの回答のいくつかで提案されているように、フィールドでワイルドカードを使用して証明書を作成してみました。このような:

Common Name: *.myserver.net/CN=myserver.net

ただし、この証明書を信頼されたルート証明機関にインポートした後NET::ERR_CERT_COMMON_NAME_INVALID、Chromeで、メインドメインとそのすべてのサブドメイン(例:https://sub1.myserver.netおよび)でエラーが発生しますhttps://myserver.net

このサーバーは、それがmyserver.netであることを証明できませんでした。そのセキュリティ証明書は* .myserver.net / CN = myserver.netからのものです。

これは、設定の誤りまたは攻撃者が接続を傍受したことが原因である可能性があります。

このエラーの原因となっている共通名フィールドに何か問題がありますか?


これも修正しようと多くの時間を費やしました。ここに私の答えを参照してくださいstackoverflow.com/questions/42816218/...
アレックスVasilevの

回答:


20

Rahulが述べたように、これは一般的なChromeとOSXのバグです。私は過去に同様の問題を抱えていました。実際、ローカルサイトの作業をテストするときに、2回[はい、それほど多くないことはわかっています]追加クリックすることにようやく飽きました。

[Windowsを使用して]この問題の可能な回避策として、利用可能な多くの自己署名証明書ユーティリティの1つを使用します

推奨手順:

  1. 自己署名証明書を作成する
  2. 証明書をWindows証明書マネージャーにインポートする
  3. クローム証明書マネージャで証明書のインポート
    注:ステップ3は、経験した問題を解決します一度、近い将来にはETAはありませんでした古いで時間を考慮... Googleのアドレスバグを**。

    同じくらい私はChromeを使用することを好むよう開発中、最近Firefox DeveloperEditionを使用しています。この問題はありません。

    お役に立てれば :)

リンクしたバグは、A)OS Xでのみ有効であり、B)末尾に「。」が付いているドメインに関するものであり、どちらも@Zedでは有効ではありません。
フィリップ

うーん、それはどのリンクでしょうか?
Thomas.Donnelly 2015年

クロムバグへのリンク(98627)
フィリップ

私が提案した修正に関係なく、私はそれを何度も使用したので、Windowsでも機能します。
Thomas.Donnelly 2015年

「開発にChromeを使用することを好むのと同じくらい、最近Firefox DeveloperEditionを使用していることに気づきました。この問題は発生していません。」もっとここに同意することができませんでした。..
アッシュ

58

Chrome 58は、サブジェクト代替名のない証明書のサポートを終了しました

今後、これがこのエラーが発生するもう1つの理由になる可能性があります。


2
:このガイドでは、私は、Mac OSX上で自己署名証明書を作成する助けalexanderzeitler.com/articles/...
carlosvini

1
サブジェクト代替名について何も言わないというエラーにもかかわらず、これは私の問題を修正しました。ありがとう!
Sharpiro

26

回避策は、「subjectAltName」(X509v3サブジェクト代替名)として使用するドメイン名を追加することです。これは、OpenSSL構成(/etc/ssl/openssl.cnfLinuxの場合)を変更し、v3_reqセクションを次のように変更することで実行できます。

[ v3_req ]

# Extensions to add to a certificate request

basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = myserver.net
DNS.2 = sub1.myserver.net

これが整っ-extensions v3_reqたら、新しい証明書を生成するときにスイッチを使用することを忘れないでください。(OpenSSLを使用してSubjectAltNameで自己署名証明書を生成するにはどうすればよいですか?も参照してください)。


1
の使用法はsubjectAltName = @alt_names私の問題を完全に解決しました。以前は、DNS IDを提供することで、ドメインにバインドしていましたCN=*.example.com。設定DNS.1 = example.comDNS.2 = *.example.comトリックをしました。(私にとって)奇妙なことは、それがすべて〜2017-03-17まで機能し、翌日停止したことでした(Windows udatesの大量のバッチを実行していました)。Linuxでは何も壊れませんでしたが、これはChromeWindows上のFirefoxだけでした。
bossi 2017年

@bossi:残念ながら、Chrome / Ubuntuでこの問題が発生しています。そして、証明書は特別なものではなく、単一のホスト、単一のDN(内部GitLabリポジトリ)です。
Pawel Kraszewski 2017年

1週間ほど前に機能しましたが、サーバーでは何も変更されていません。他の2台のサーバーが大文字と小文字の不一致のために暴言を吐き始めました(証明書は大文字、Chromeはアドレスを小文字に落とします)
Pawel Kraszewski 2017年

2
@bossiあなたのWindowsバージョンはベータトラックにあると思いますよね?Chromeは、現在ベータ版subjectAltName であるChrome 58の時点で、非推奨の証明書を持っています。これは、私がそれについて何も見なかっただけでなく、エラー名が非常に誤解を招くため(無効な一般名ではありません!)、私を苦しめました。私はあなたの反対でした。それは私にとってLinuxでのみ起こったので、そこで地元の証明書ストアを修正しようと何時間も費やしました。
Tobias J

2
@TobyJ 58.0.3029.19 beta (64-bit)です。正しいsubjectAltName-sを使用して証明書ツリーを再生成しましたが、すべてが機能するようになりました。そして私は同意します、それは無効ではないので、エラーメッセージは非常に誤解を招くものCommonNameです。メッセージが読めば「証明書が適切に不足しているsubjectAltName、誰もがはるかに幸せになります。
Pawel Kraszewski 2017年

17

openssl.confファイルの作成:

[req]
default_bits = 2048
default_keyfile = oats.key
encrypt_key = no
utf8 = yes
distinguished_name = req_distinguished_name
x509_extensions = v3_req
prompt = no

[req_distinguished_name]
C = US
ST = Cary
L = Cary
O  = BigCompany
CN = *.myserver.net

[v3_req]
keyUsage = critical, digitalSignature, keyAgreement
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.1 = myserver.net
DNS.2 = *.myserver.net

このコマンドを実行します。

openssl req -x509 -sha256 -nodes -days 3650 -newkey rsa:2048 -keyout app.key -out app.crt  -config openssl.conf

ファイルapp.crtを出力app.keyして、私のために働きます。


2
にタイプミスがありDNS.1 = *.myserver.netます。する必要があります DNS.2 = *.myserver.net。私にとっては問題なく動作します。
Artem Stepin 2018

2
Windowsを使用している場合、これは、管理者として実行されているcmdと次の場所を使用してgitとともにインストールされたopensslを使用して実行できます: "C:\ Program Files \ Git \ usr \ bin \ openssl.exe" req -x509 -sha256 -nodes -days 3650 -newkey rsa:2048 -keyout app.key -out app.crt -config openssl.conf
George

CN = localhost、DNS.1 = localhost、DNS.2 = * .localhost:8080と記述しましたが、機能していません。他に何を変更する必要がありますか?
Esqarrouth

14

ワイルドカード*.example.comはルートドメインをカバーしませexample.comが、またはなどのサブドメイン上のすべてのバリアントをカバーしますwww.example.comtest.example.com

推奨される方法は、Fabianの回答のようにサブジェクト代替名を確立することですが、Chromeでは現在、サブジェクト代替名の1つとして共通名を追加でリストする必要があることに注意してください(彼の回答で正しく示されているため)。最近example.com、SANwww.example.comとの共通名を持っていたためにこの問題を発見しましtest.example.comたが、NET::ERR_CERT_COMMON_NAME_INVALIDChromeから警告が表示されました。example.com共通名SANの1つを使用して、新しい証明書署名要求を生成する必要がありました。その後、Chromeは証明書を完全に信頼しました。また、ウェブサイトを識別するための信頼できる機関として、ルート証明書をChromeにインポートすることを忘れないでください。


これを読んでいる人がホスティングにパンテオンを使用している場合、プラットフォームにアップロードしたときに証明書に関連付けられている共通名が再構成されているようで、この問題が発生します。セットアップ中に証明書の共通名がそのまま残っているかどうかを確認するために、それらが提供するカスタム静的IPに対してテストする必要があります。
serraosays 2017年

1
鮮やかさ!「ワイルドカード* .example.comはルートドメインexample.comをカバーしていませんが、www.example.comやtest.example.comなどのサブドメイン上のすべてのバリアントをカバーします。」私の場合、これはまさに問題でした。修正は、両方含まれるように、単純だったDNS.1 = example.comDNS.2 = *.example.comの下[alt_names]でをopenssl.cnf
ベンジョンソン


1

これに遭遇し、それをテストするリスクを受け入れたいすべての人のために、解決策があります。Chromeでシークレットモードに移動すると、[詳細設定]を開いて[some.urlに進む]をクリックできます。

これは、自分で管理していて開発者としてテストしているWebサイトを確認する必要がある場合(および適切な開発証明書がまだ構成されていない場合)に役立ちます。

もちろん、これは、このエラーがWebサイトのセキュリティに問題があることを示している本番環境でWebサイトを使用しているユーザー向けではありません。


0

このエラーにうんざりしている場合。Chromeがこのように動作しないようにすることができます。私はそれが方法だと言っているだけでそれが最善の方法だと言っているのではありません。

回避策として、Windowsレジストリキーを作成して、証明書にsubjectAlternativeName拡張子がない場合に、サーバー証明書のcommonNameを使用してホスト名と一致させることができます。ただし、証明書が正常に検証され、ローカルにインストールされたCAにチェーンされます。証明書。

データタイプ:ブール値[Windows:REG_DWORD] Windowsレジストリの場所:HKEY_LOCAL_MACHINE \ SOFTWARE \ Policies \ Google \ Chrome Windows / Mac / Linux / Androidプリファレンス名:EnableCommonNameFallbackForLocalAnchors値:0x00000001(Windows)、true(Linux)、true(Android)、 (Mac)Windowsレジストリキーを作成するには、次の手順に従ってください。

メモ帳を開く次のコンテンツをコピーしてメモ帳に貼り付けますWindowsレジストリエディタバージョン5.00

[HKEY_LOCAL_MACHINE \ SOFTWARE \ Policies \ Google \ Chrome] "EnableCommonNameFallbackForLocalAnchors" = dword:00000001ファイルに移動>ファイル名として保存:any_filename.regタイプとして保存:すべてのファイル

ファイルの優先場所を選択します

[保存]をクリックします

保存したファイルをダブルクリックして実行します

レジストリエディタの警告で[はい]をクリックします

この情報は、Symantecサポートページで見つかりました:https//support.symantec.com/en_US/article.TECH240507.html


0

ローカル開発とテスト用のPWAを作成している間、提供された回答は私(ChromeまたはFirefox)では機能しませんでした。生産には使用しないでください!私は以下を使用することができました:

  1. 次のオプションを備えたオンライン証明書ツールサイト:
    • 一般名:システムの「localhost」とIPの両方を追加します(例:192.168.1.12)
    • サブジェクト代替名:「DNS」= "localhost"および "IP" =を追加 <your ip here, e.g. 192.168.1.12>
    • 「自己署名」に設定された「CRS」ドロップダウンオプション
    • 他のすべてのオプションはデフォルトでした
  2. すべてのリンクをダウンロード
  3. ダブルクリックして.p7b証明書をWindowsにインポートし、[インストール] / OSXを選択しますか?/ Linux?
  4. ノードアプリに証明書を追加... GoogleのPWAの例を使用
    • const https = require('https'); const fs = require('fs');server.jsファイルの先頭に追加します
    • return app.listen(PORT, () => { ... });server.jsファイルの下部にコメントアウト
    • 以下に追加 https.createServer({ key: fs.readFileSync('./cert.key','utf8'), cert: fs.readFileSync('./cert.crt','utf8'), requestCert: false, rejectUnauthorized: false }, app).listen(PORT)

ChromeやFirefoxでエラーはもうありません

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