我有一个由同事创建的证书和私钥文件。它们放在 Apache/etc/apache/ssl
目录中,并且所有配置都已正确设置。
我打开了该网站https://
并得到“证书不受信任“错误,并且”网址不匹配“,所以我将其添加到受信任的根证书颁发机构。
但它并没有修复错误,问题仍然存在。当我查看证书详细信息时,我可以看到“颁发给”和“颁发者”的值不同。
尝试 1:
我已经使用以下命令创建了自己的证书和私钥文件并重新加载了 Apache 配置。
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt
此证书的“颁发者”和“颁发给”值相同。此后,我再次打开网站并https://
得到“证书不受信任“错误,这次没有”网址不匹配“错误。我将此证书添加到受信任的根证书颁发机构我能够看到绿色状态并且站点已加密。
为什么我不能使用现有证书来让它工作?
答案1
第一个证书最初不受信任的原因可能是它所关联的 URL 没有在证书中生成主题名称。此时,将证书添加到受信任的根存储区没有任何作用,因为您没有解决根本问题,即证书名称不匹配。
因此,证书不仅需要位于受信任的根存储中(或者具有最终解析到存储中受信任根的链,就像您在商业上购买的证书一样),而且还需要在其他所有方面都有效。名称匹配、未过期、适合所提出的用途等。
答案2
Issued by
自签名证书在和字段中应具有相同的值Issue to
。为了检查它,我执行了以下命令(基于此文章):
$ openssl req -new -newkey rsa:2048 -days 365 -nodes -x509 -keyout server.key -out server.crt
[..]
Country Name (2 letter code) [AU]:**
State or Province Name (full name) [Some-State]:.
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:test.example.com
Email Address []:
$ openssl x509 -in server.crt -text -noout
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 15468555439710779235 (0xd6ab59376c65b763)
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=**, O=Internet Widgits Pty Ltd, CN=test.example.com
Validity
Not Before: Feb 16 22:10:50 2016 GMT
Not After : Feb 15 22:10:50 2017 GMT
Subject: C=**, O=Internet Widgits Pty Ltd, CN=test.example.com
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
00:e3:cd:74:a4:45:6a:ed:54:51:f0:9e:1b:1f:b2:
[..]
28:2d
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Subject Key Identifier:
DC:BB:4C:1B:74:8E:76:7D:60:C9:25:3B:78:B6:EA:F5:70:5C:0E:FD
X509v3 Authority Key Identifier:
keyid:DC:BB:4C:1B:74:8E:76:7D:60:C9:25:3B:78:B6:EA:F5:70:5C:0E:FD
X509v3 Basic Constraints:
CA:TRUE
Signature Algorithm: sha256WithRSAEncryption
76:7b:0c:d9:a8:e1:47:e3:19:6e:05:c9:8a:1a:d4:f5:19:25:
[..]
83:2f:7a:21
看上去Issuer
和Subject
是一样的。
如果将该证书添加到受信任的存储区(客户端/ Web 浏览器)并将其分配给具有域的虚拟主机的 Web 服务器,text.example.com
并且将通过该服务器访问页面,https://test.example.com/
则应将其标记为受信任/URL 匹配。
答案3
正如@Xander 指出的那样,问题可能是 CN 或 SAN 字段不包含域名或证书已过期。如果您发布证书的字段,我们应该能够提供帮助。您可以使用以下命令转储值
openssl x509 -noout -text -in /path-to-the-colleague-cert/server.crt
在主题字段中,CN 应该是您用于访问该站点的域名。如果它有主题名称替代,则 CN 将被忽略,然后您必须确保某些 SAN 字段包含域名