HTTPS 是以安全为目标的 HTTP 通道,通过 TLS 加密协议提供可信、安全的 HTTP 通信。一个网站要使用 HTTPS 协议需要以下三个步骤:
- 选择加密方式,生成私钥及公钥。其中公钥为 CSR (Certificate Signing Request) 文件
- 将生成的 CSR 提交到 CA 进行申请并验证
- CA 下发证书后为站点配置安装证书
本文中使用了必要工具 OpenSSL,通常 Linux / MaxOS 系统上都已经预装完成了,而 Windows 平台可以使用 WSL 或者另行寻找安装。
普通命令生成 CSR 文件
确定 OpenSSL 已经安装后,在 Shell 里输入命令生成 CSR:
1 | openssl req -nodes -newkey rsa:2048 -sha256 -keyout myserver.key -out server.csr |
该命令解释:
创建一个 RSA 的 2048 位私钥,并指定加密算法使用的哈希值长度为 256 位(SHA256),因为 SHA1 证书可能被伪造而出现安全风险,国际上已决定不再签发超过 2017 年的 SHA1 证书,谷歌和微软等巨头也已经淘汰 SHA1 证书并标记为不安全。在执行该命令之后会要求填写证书主题的各个字段:
1 | # 填写国家代号,中国填写 CN |
对于填写域名字段需要注意,通常签发 www.example.com
的证书的 DNS Name 里会包含根域 example.com
,但申请二级域名诸如 abc.example.com
的话就不会包含根域了。如果需要泛域名证书,则需要填写 *.example.org
。
填完上述信息后会在当前目录生成 myserver.key
和 server.csr
文件 ,其中 server.csr
里面的内容是提交给证书颁发机构的。而 myserver.key
文件是私钥,存放在自己的服务器上的,需要妥善保管。
到这里 CSR 的生成已经完成了,接下来就是向CA提交 CSR 了。对于普通的 DV(域名验证) SSL 证书 只需要保证 CN(Common Name) 字段填上你的域名即可。至于高级的 OV(组织验证),EV(扩展验证)证书都需要向 CA 提交相关资料以验证证书字段内容的真实性。
简化版命令生成 CSR 文件
如果申请的证书为普通的 DV SSL 证书,可以尝试使用以下简化版命令省去填写字段的过程:
1 | openssl req -nodes -newkey rsa:2048 -sha256 -keyout server.key -subj "/CN=example.org" -out server.csr |
该命令解释:
创建一个 RSA 的 2048 位私钥并在当前目录保存为 server.key 并生成一个域名为 example.org 的 CSR 并保存为 server.csr.一般这样生成的 CSR 即可用于申请大多数 CA 的数字证书。如果该 CSR 不能通过 CA 的申请流程,需要用正常命令生成。