如何签署自己的 SSL 证书以使其涵盖 www 和非 www 域名?

如何签署自己的 SSL 证书以使其涵盖 www 和非 www 域名?

当使用商业证书颁发机构时,为通用名称生成 csrwww.mysite.com并将其发送给他们将导致颁发适用于和 的www.mysite.com证书mysite.com

签名请求只是单个名称请求www.mysite.com,因此在 csr 级别不会发生任何特殊情况:

openssl genrsa -des3 -out mysite.com.key 4096

openssl req -new -key mysite.com.key -out mysite.com.csr
common name, ie your name: www.mysite.com

但是商业 CA 返回的证书可以在 www 和非 www 上起作用。

问题:我怎样才能获得仅适用于和的 csr ,并使用我自己的证书颁发机构的 openssl 颁发适用于和的www.mysite.com证书,就像商业公司所做的那样?www.mysite.commysite.com

我知道您可以修改 csr 以使用配置文件添加多个域,但是使用商业公司时,csr 中只需要 www 版本。不需要多域配置文件。

商业 CA 是否会修改已提交的 csr 以包含两个版本?或者签名命令中是否有标志使其成为www可选项?

我可以修改此命令以添加 www 和非 www 版本,而无需更改 csr 吗?

openssl x509 -req -days 365 -in mysite.com.csr -CA Authority.crt -CAkey Authority.key -set_serial 12345 -out mysite.com.crt

或者有没有简单的方法将第二个域名添加到 csr没有配置文件?

openssl req -new -key mysite.com.key -out mysite.com.csr
common name, ie your name: mysite.com, www.mysite.com

答案1

CSR 不需要修改。该证书不是 CSR,不是 CSR 的副本,也不是通过签署 CSR 创建的。该证书是一个新对象,其中包含一些数据复制自CSR 以及一些新数据。

特别是“商业” CA(LetsEncrypt 和 CACert 等不收费,因此实际上不是商业的)设置SubjectAlternativeName (SAN) 扩展(在证书中)支持多个“DNS”名称(它也可以支持其他类型的名称,但您不希望在这里这样做)。主题名称中的 CommonName 属性一定不包含多个域名,因为无法匹配。

虽然 OpenSSL 可以通过多种方式执行 SAN,但使用openssl x509 -req -CA/CAkey可以使其更简单:唯一的选项是指定-extfile包含所需设置的 。这可能需要您明确创建的实际文件,或者在 Unix 上的某些 shell 中,您可以使用语法<(command)来创建隐藏的临时文件。请参阅:
Chrome 不信任自签名证书
Chrome 桌面版和 Android 拒绝接受受信任的自签名证书
https://stackoverflow.com/questions/61125319/node-js-self-signed-certificate-is-still-showing-as-not-trusted-in-my-browser
还有很多其他链接。(很多都涉及 Chrome,因为 Chrome 是原因使用 SAN,但实现 SAN 的方法并不取决于原因。

相关内容