域名,也称为 Common Name,因为特殊的证书不一定是域名:example.com
组织或公司名字(Organization):Example, Inc.
部门(Department):可以不填写,这里我们写 Web Security
城市(City):Beijing
省份(State / Province):Beijing
国家(Country):CN
加密强度:2048 位,如果你的机器性能强劲,也可以选择 4096 位
按照以上信息,使用 OpenSSL 生成 key 和 csr 的命令如下
|
|
PS:如果是泛域名证书,则应该填写 *.example.com
在系统的任何地方运行这个命令,会自动在当前目录生成 example_com.csr
和 example_com.key
这两个文件
接下来你可以查看一下 example_com.csr
,得到类似这么一长串的文字
|
|
这个 CSR 文件就是你需要提交给 SSL 认证机构的,当你的域名或组织通过验证后,认证机构就会颁发给你一个 example_com.crt
而 example_com.key
是需要用在 Nginx 配置里和 example_com.crt
配合使用的,需要好好保管,千万别泄露给任何第三方。
需要提交 CSR 文件给第三方 SSL 认证机构,通过认证后,他们会颁发给你一个 CRT 文件,我们命名为 example_com.crt
同时,为了统一,你可以把这三个文件都移动到 /etc/ssl/private/
目录。
然后可以修改 Nginx 配置文件
|
|
但是这么做并不安全,默认是 SHA-1 形式,而现在主流的方案应该都避免 SHA-1,为了确保更强的安全性,我们可以采取迪菲-赫尔曼密钥交换
首先,进入 /etc/ssl/certs
目录并生成一个 dhparam.pem
|
|
|
|
生成完毕后,在 Nginx 的 SSL 配置后面加入
|
|
同时,如果是全站 HTTPS 并且不考虑 HTTP 的话,可以加入 HSTS 告诉你的浏览器本网站全站加密,并且强制用 HTTPS 访问
|
|
同时也可以单独开一个 Nginx 配置,把 HTTP 的访问请求都用 301 跳转到 HTTPS
|
|
我的做法是采用了第一种。
这样就完成了,最终的配置文件如下:
|
|