在生成自签名证书时指定主题备用名称

11
有没有一种方法可以获得设置了主体替代名称的 .crt 和 .key 文件?我正在使用此命令生成的 openssl .crt 和 .key 配置代理。
openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout proxy.key -out proxy.crt

我会将.key和.crt文件合并成.pem文件,并在客户端使用该文件来保护https连接。虽然证书有效,但是会出现“未设置证书主题备用名称”的警告。在另一个客户端中,这个警告实际上是终止连接的错误。 此处的解决方案给了我一个.csr文件,我将其重命名为所需的.crt文件。当我将其与客户端一起使用时,https连接会因ssl证书不正确而失败。

1
可能是如何使用openssl创建自签名证书?的重复问题。 - jww
2个回答

16
根据 @vog 的 答案,如下所示:
openssl req -x509 -newkey rsa:4096 -sha256 -days 3650 -nodes \
  -keyout example.key -out example.crt -subj "/CN=example.com" \
  -addext "subjectAltName=DNS:example.com,DNS:www.example.net,IP:10.0.0.1"

(请注意,这仅适用于OpenSSL >= 1.1.1版本。)


4
未知选项 -addext LibreSSL 2.8.3 - Pavol Travnik
1
这并不是Debian或Mac的本地解决方案,因为涉及到OpenSSL版本问题 - 这可能只适用于特殊设置的解决方案。 - Pavol Travnik
2
在Ubuntu 21.04上,使用纯OpenSSL完美运行!为什么要使用Libre某些东西,当到处都标记着确切的openssl? - Reishin
2
@PavolTravnik 是你使用了一些自定义配置,在Ubuntu、CentOS、Fedora上开箱即用。 - Reishin
1
感谢您添加了一个带有多个DNS条目的示例,这让我很难找到正确的语法。已点赞。 - EugeneRomero
显示剩余4条评论

4

1
jww,不知何故,当我执行你发送给我的第二个链接中的指令时,我发现我的.crt文件中现在有了一个SAN字段,这很好,但是当我将证书与密钥合并为pem文件以在客户端中使用时,我遇到了“SSL: CERTIFICATE_VERIFY_FAILED”的错误。如果我完全相同地使用openssl生成证书,但改用默认的ubuntu openssl.cnf,则可以成功连接,但会出现“Certificate has no 'subjectAltName'”警告。因此,添加SAN似乎导致验证失败。 - Hamzeh Alsalhi
1
@HamzehAlsalhi - 用户代理是什么?这是一个浏览器吗?还是像s_clientwgetcURL这样的命令行工具? - jww
1
我正在使用Python requests进行测试,它给了我SAN警告。Java HttpsURLConnection是最终目标,但这个客户端在没有警告的情况下出现错误。 - Hamzeh Alsalhi
1
如果您拥有带有SAN的证书,那么您应该提出一个新的问题。听起来你现在遇到了Python信任自签名证书的问题。Stack Overflow喜欢保持问题/答案的针对性和简洁性。这会使未来的访问者更容易理解。 - jww
1
你说得对,你解决了我最初提出的问题,所以我会接受这个答案。 - Hamzeh Alsalhi
1
这个答案已经不再正确了;https://dev59.com/4Gkw5IYBdhLWcg3wDWIk#41366949 - redbeam_

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接