为域和子域创建自签名证书 - NET :: ERR_CERT_COMMON_NAME_INVALID

问题描述 投票:73回答:8

我按照this教程在Windows上创建签名SSL证书用于开发目的,它对我的​​一个域(我使用hosts文件来模拟dns)非常有用。然后我发现我有很多子域名,为每个子域名创建证书会很麻烦。所以我尝试在Common字段中使用通配符创建证书,如serverfault的一些答案所示。像这样:

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

但是,在将此证书导入受信任的根证书颁发机构后,我在Chrome中获取NET::ERR_CERT_COMMON_NAME_INVALID错误,主要域及其所有子域名,例如:https://sub1.myserver.nethttps://myserver.net

这台服务器无法证明它是myserver.net;其安全证书来自* .myserver.net / CN = myserver.net。

这可能是由于配置错误或攻击者拦截您的连接造成的。

Common Name字段中是否有错误导致此错误?

ssl dns openssl windows-7-x64
8个回答
18
投票

正如Rahul所说,这是一个常见的Chrome和OSX错误。我过去遇到过类似的问题。事实上,我最终厌倦了在测试本地网站工作时使2 [是的我知道并不多]额外点击。 至于这个问题的可能解决方法[使用Windows],我会使用众多self signing certificate utilities available中的一个。 推荐步骤:

  1. Create a Self Signed Cert
  2. Import Certificate into Windows Certificate Manager
  3. 在Chrome证书管理器中导入证书 注意:第3步将解决一旦Google解决该问题所遇到的问题......考虑到在可预见的将来没有ETA的时间已过时。** 尽管我更喜欢使用Chrome进行开发,但最近我发现自己在Firefox Developer Edition。哪个没有这个问题。 希望这可以帮助 :)

56
投票

Chrome 58有dropped support for certificates without Subject Alternative Names

继续前进,这可能是您遇到此错误的另一个原因。


25
投票

解决方法是将您使用的域名添加为“subjectAltName”(X509v3使用者替代名称)。这可以通过更改OpenSSL配置(Linux上的/etc/ssl/openssl.cnf)并修改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开关。 (另见How can I generate a self-signed certificate with SubjectAltName using OpenSSL?


12
投票

你的通配符*.example.com不包括根域example.com,但会覆盖子域上的任何变体,如www.example.comtest.example.com

首选方法是在Fabian's Answer中建立主题备用名称,但请记住,Chrome目前要求将公共名称另外列为主题备用名称之一(正如他在答案中正确演示的那样)。我最近发现了这个问题,因为我有通用名称example.com与SANs www.example.comtest.example.com,但得到了Chrome的NET::ERR_CERT_COMMON_NAME_INVALID警告。我不得不使用example.com生成一个新的证书签名请求作为公共名称和一个SAN。然后Chrome完全信任该证书。不要忘记将根证书导入Chrome,作为识别网站的可信任机构。


12
投票

创建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.crtapp.key为我工作。


5
投票

我认为这可能是chrome中的一个bug。很久以前也有类似的问题:See this.

尝试使用其他浏览器。我认为它应该工作正常。


1
投票

对于遇到此问题且希望接受测试风险的每个人,都有一个解决方案:转到Chrome中的隐身模式,您就可以打开“高级”,然后点击“继续使用some.url”。

如果您需要检查自己维护的某个网站并且只是作为开发人员进行测试(以及当您尚未配置适当的开发证书时),这将非常有用。

当然,这不是为了使用生产网站的人,这个错误表明网站安全存在问题。


0
投票

如果你厌倦了这个错误。你可以让Chrome不这样做。我不是说这是最好的方式,只是说它是一种方式。

作为解决方法,可以创建Windows注册表项,以允许Google Chrome使用服务器证书的commonName来匹配主机名(如果证书缺少subjectAlternativeName扩展名),只要它成功验证并链接到本地​​安装的CA证书。

数据类型:Boolean [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

© www.soinside.com 2019 - 2024. All rights reserved.