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

Zed*_*Zed 77 dns ssl openssl windows-7-x64

我按照教程在Windows上创建签名SSL证书用于开发目的,并且它适用于我的一个域(我使用hosts文件来模拟dns).然后我发现我有很多子域名,为每个子域名创建证书会很麻烦.所以我尝试使用wildcard in Commonfield 创建证书,如serverfault的一些答案所示.像这样:

Common Name: *.myserver.net/CN=myserver.net
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

Mic*_*ner 57

Chrome 58已经放弃了对没有主题备用名称的证书的支持.

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

  • 该指南帮助我在Mac OSX上创建了自签名证书:https://alexanderzeitler.com/articles/Fixing-Chrome-missing_subjectAltName-selfsigned-cert-openssl/ (2认同)

小智 26

解决方法是将您使用的域名添加为"subjectAltName"(X509v3使用者替代名称).这可以通过更改OpenSSL配置(/etc/ssl/openssl.cnf在Linux上)并将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
Run Code Online (Sandbox Code Playgroud)

有了这个,-extensions v3_req在生成新证书时不要忘记使用开关.(另请参阅如何使用OpenSSL生成带有SubjectAltName的自签名证书?)

  • 使用 `subjectAltName = @alt_names` 完全解决了我的问题。我之前通过“CN=*.example.com”提供 DNS 身份来将其绑定到我的域。设置“DNS.1 = example.com”和“DNS.2 = *.example.com”就可以了。奇怪的事情(对我来说)是它一直工作到 2017 年 3 月 17 日,并在一天后停止(运行了大量 Windows 更新)。不过,在 Linux 上*没有什么*对我来说是坏事,这只是 *Windows* 上的 *Chrome*、*Firefox*。 (2认同)
  • @bossi我打赌你的Windows版本正处于测试阶段,对吗?Chrome已弃用证书而没有`subjectAltName` [从Chrome 58开始](https://www.chromestatus.com/feature/4981025180483584),目前处于测试阶段.这让我很难,因为我不仅没有看到任何关于它的东西,而且错误名称是非常误导的(这不是普通的名字,它是无效的!)我是你的反面; 它只发生在Linux上,所以我花了几个小时试图修复我当地的证书商店. (2认同)
  • @TobyJ`58.0.3029.19 beta(64位)`它是.我用正确的`subjectAltName`-s重新生成了证书树,现在一切正常.我同意,错误消息**非常误导,因为它不是"CommonName"无效的.如果消息显示_"证书缺少正确的`subjectAltName`"_,那么每个人都会更开心. (2认同)

Tho*_*lly 18

正如Rahul所说,这是一个常见的Chrome和OSX错误.我过去遇到过类似的问题.事实上,我最终厌倦了在测试本地网站工作时使2 [是的我知道并不多]额外点击.

至于这个问题的可能解决方法[使用Windows],我会使用许多可用的自签名证书实用程序之一.

推荐步骤:

  1. 创建自签名证书
  2. 将证书导入Windows证书管理器
  3. 在Chrome证书管理器中导入证书
    注意:第3步将解决一旦 Google 解决该问题所遇到的问题...考虑到在可预见的将来没有ETA的时间过去.**

    尽管我更喜欢使用Chrome开发,我最近发现自己在Firefox Developer Edition中.哪个没有这个问题.

    希望这可以帮助 :)


Aly*_*ali 15

创建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
Run Code Online (Sandbox Code Playgroud)

运行此命令:

openssl req -x509 -sha256 -nodes -days 3650 -newkey rsa:2048 -keyout app.key -out app.crt  -config openssl.conf
Run Code Online (Sandbox Code Playgroud)

输出文件app.crtapp.key为我工作.

  • 在`DNS.1 =*.myserver.net`中有一个拼写错误.应该是`DNS.2 =*.myserver.net`.对我来说工作得很好. (2认同)
  • 如果您在Windows上,则可以通过使用以admin身份运行的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 (2认同)
  • 我一直无法让这个工作。(Chrome 仍然说证书不受信任。)我想知道为什么它说“default_keyfile = oats.key”。 (2认同)

Jef*_*ett 13

您的通配符*.example.com没有覆盖根域example.com,但将覆盖在任何变种 -domain如www.example.comtest.example.com

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


Rah*_*ram 5

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

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