我按照this教程在Windows上创建签名SSL证书用于开发目的,并且它适用于我的一个域(我使用hosts文件来模拟dns)。然后我发现我有很多子域名,为每个子域名创建证书会很麻烦。所以我尝试在Common
字段中使用通配符创建证书,如serverfault中的一些答案所示。像这样:
Common Name: *.myserver.net/CN=myserver.net
但是,在将此证书导入受信任的根证书颁发机构后,我在Chrome中遇到NET::ERR_CERT_COMMON_NAME_INVALID
错误,主要域及其所有子域名,例如:https://sub1.myserver.net
和{{ 1}}。
此服务器无法证明它是myserver.net;它的安全证书 来自* .myserver.net / CN = myserver.net。
这可能是由于配置错误或攻击者拦截您的连接造成的。
Common Name字段中是否出现导致此错误的错误?
答案 0 :(得分:24)
解决方法是添加您使用的域名" 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?)
答案 1 :(得分:19)
正如Rahul所说,这是一个常见的Chrome和OSX错误。我过去遇到过类似的问题。事实上,我最终厌倦了在测试本地网站工作时使2 [是的我知道并不多]额外点击。
至于这个问题的可能解决方法[使用Windows],我会使用众多self signing certificate utilities available中的一个。
推荐步骤:
答案 2 :(得分:11)
您的通配符*.example.com
不 覆盖根域example.com
,但会覆盖子上的任何变体-domain,例如www.example.com
或test.example.com
首选方法是在Fabian's Answer中设置主题备用名称,但请记住,Chrome目前要求将公用名称另外列为主题备用名称之一(正如在其答案中正确演示的那样) )。我最近发现了这个问题,因为我的公共名称example.com
包含SAN www.example.com
和test.example.com
,但得到了Chrome的NET::ERR_CERT_COMMON_NAME_INVALID
警告。我必须使用example.com
生成一个新的证书签名请求,作为其中一个SAN的公共名称和。然后Chrome完全信任该证书。并且不要忘记将根证书导入Chrome,作为识别网站的可信任机构。
答案 3 :(得分:11)
创建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
适用于我。
答案 4 :(得分:5)
我认为这可能是Chrome中的一个错误。长期存在类似的问题: See this.
尝试使用其他浏览器。我认为应该可以正常工作。
答案 5 :(得分:1)
对于遇到此问题并想承担进行测试风险的每个人,都有一个解决方案:在Chrome中进入隐身模式,您可以打开“高级”,然后单击“继续到some.url”
如果您需要检查自己维护的某些网站并只是作为开发人员进行测试(以及尚未配置适当的开发证书时),这将很有帮助。
当然,这不适用于在生产环境中使用网站的人,该错误指示网站安全存在问题。
答案 6 :(得分: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 \政策\谷歌\铬] " EnableCommonNameFallbackForLocalAnchors" = DWORD:00000001 转到文件>另存为 文件名:any_filename.reg 保存类型:所有文件
选择文件的首选位置
点击保存
双击保存的文件以运行
在注册表编辑器警告
上单击是
在Symantec支持页面上找到此信息: https://support.symantec.com/en_US/article.TECH240507.html
答案 7 :(得分:0)
在为本地开发和测试创建PWA时,提供的答案不适用于我(Chrome或Firefox)。请勿用于生产!我可以使用以下内容:
<your ip here, e.g. 192.168.1.12>
const https = require('https');
const fs = require('fs');
添加到server.js文件的顶部return app.listen(PORT, () => { ... });
https.createServer({
key: fs.readFileSync('./cert.key','utf8'),
cert: fs.readFileSync('./cert.crt','utf8'),
requestCert: false,
rejectUnauthorized: false
}, app).listen(PORT)
以下我在Chrome或Firefox中没有更多错误