在测试环境或一些内部环境中,我们经常使用自签名的证书来配置 HTTPS 的环境。
在本次实验中,假设需要制作的证书对应的网站为: example.com
安装 openssl
通常可以使用 openssl 来生成自签名证书。 因此,首先验证一下系统中有没安装 openssl, 执行:
1 | openssl version |
正常显示应该是:
1 | OpenSSL 1.1.1 11 Sep 2018 |
如果还没有安装,可以执行:
1 | sudo apt-get install openssl |
生成证书和密钥
执行:
1 | sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/example.com.key -out /etc/ssl/certs/example.com.pem |
系统显示:
1 | Can't load /home/st/.rnd into RNG |
可以看到,openssl 为我们生成了密钥,保存在 /etc/ssl/private 目录中,实际上,它还生成了对应的证书,保存在 /etc/ssl/certs 目录中,这两个文件都是后面配置需要用到的。
然后,我们在为密钥交换建立一个 Diffie-Hellman。 执行:
1 | openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048 |
配置 Nginx
在 Ubunt 18.04 中安装 Nginx 一文中,我们描述过 nginx 的配置目录结构及用处, 在本次配置中,我们就按该结构来编制、保存相关的配置信息。
- 在 snippets 目录中新建一个名为 self-signed-example-com.conf 文件。 因为你可能会在多个 Nginx 虚拟站点(端口不同)中用到这套证书,所以我们把相关的配置放在 snippets 中,以便于复用:
1 | sudo vi /etc/nginx/snippets/self-signed-example-com.conf |
在文件中加入以下两行:
1 | ssl_certificate /etc/ssl/certs/example.com.pem; |
指定在 SSL 中要使用的密钥和证书。
- 在 snippets 目录中新建一个名为: ssl-params.conf 的文件, 指明 SSL 证书交换中要使用的参数:
1 | sudo vi /etc/nginx/snippets/ssl-params.conf |
在文件中加入以下内容:
1 | ssl_protocols TLSv1 TLSv1.1 TLSv1.2; |
- 在 /etc/nginx/sites-available 中新建名为 example.com.conf 的配置文件, 内容如下:
1 | server { |
在案例中是配置了一个反向代理。如果你需要的是静态完整,增加 root 选择,修改 locaiton 选择即可。
- 为 example.com.conf 文件在 sites-enabled 目录中添加要给链接, 在 sites-enabled 目录中执行:
1 | sudo ln -s ../sites-available/example.com.conf example.com.conf |
- 重启或重新加载 nginx
1 | sudo systemctl restart nginx |