nginx如何配置https证书

上一篇文章我们简单介绍了https的原理,这篇文章我们用nginx来配置一下https的证书。

首先我们来回顾一下https的原理,首先我们看图:

第一步、客户端发送请求,服务器将证书发送给客户端,证书的本质是第三方CA的私钥加密的内容,其内容是服务器的公钥。

第二步、客户端接收到证书后,用操作系统和浏览器内置的CA公钥去匹配验证证书,如果能解密,说明请求的是目标网站,不是中间人。

第三步、用CA公钥解密证书,并将服务器公钥解密出来。到这一步,客户端安全的拿到了服务器端的公钥。

第四步、生成随机数,用服务器公钥加密随机数发送到服务器端。

第五步、服务器端用服务器私钥解密信息,得到随机数

我们仔细阅读上面的流程,我们将客户端和服务器端用到的工具分一下类:

客户端用到的如下:

1、CA机构的公钥:已经内置到系统中不需要处理

2、公钥证书:服务器端发送给客户端的,客户端会自动用CA公钥解密证书

3、服务器公钥:客户端用CA公钥解密证书获得

4、随机数生成对称秘钥:自动生成

服务器端:

1、公钥证书 需要去申请

2、服务器端私钥 需要服务端手动生成

客户端需要的工具不需要我们配置,主要是服务器端的工具,我们看到服务器端需要公钥证书和服务器端私钥,这两个东西如何来的呢?

首先我们在服务器端用ssh-keygen命令来生成公私钥,在服务器端命令行中执行,ssh-keygen会在服务器的"~/.ssh"目录中生成两个文件 id_rsa,id_rsa.pub,前者不带pub后缀的为私钥,后者带pub后缀的为公钥。

得到了服务器端的公钥和私钥后,我们需要用服务器端的公钥去申请证书,这里大家如果是去向一些收费的CA机构申请证书的话,CA机构的客服一般会想你要你的服务器公钥和你的网站信息,然后CA机构用CA机构的私钥加密你的服务器公钥得到公钥证书,然后CA机构会将公钥证书颁发给你。

经过上面两部操作我们就会得到公钥证书和服务的私钥,拿到这两个文件我们可以使用配置https协议的网站了。

这里要说明一下,我们向有些CA机构申请证书时,它不需要你提交服务器公钥,而是它会自己生成一对服务器的公私钥,然后把服务器公钥用CA私钥加密成证书,和服务器私钥一起发送给你,阿里云的免费证书就是这样操作的。

首先在阿里云的控制台点击 SSL证书

进入相应的页面,然后点击购买证书:

进入相应页面,我们购买免费的DV证书即可,当然如果你要求安全级别更高,可以购买 DV或者EV:

这样我们就购买完证书了,然后根据域名去申请证书就可以了,这里和传统的证书机构申请证书还不太一样,一些其他的CA机构需要你把服务器公钥和网站信息发给客服,客服会把证书颁发给你。

购买了免费DV证书后,就可以去申请了,接着我们去申请证书,界面如下:

我们在阿里云购买的是申请证书的权利,所有可申请的证书全在这个列表中了,点击申请,填写要部署https的域名:

1处我们填写我们的域名,可以是二级域名或者一级域名,因为是免费的不能用通配符。

2处我们选择自动DNS验证,这里验证申请的证书用的域名所有权是你的,也就是说你不能用别人的域名申请https证书。

3处这里需要我们呢生成csr文件,这个文件是干嘛的呢?其实就是你的网站的信息,你可以让阿里云帮你生成,这样的话你就选择系统生成,如果你不愿系统生成也可以自己生成。

自己生成csr的话可以去网上找免费的工具来生成,如下:

我一般是选择系统生成。

之后提交申请,申请通过后,会在下面栏目中出现证书下载地址:

我们点击下载即可得到两个文件,这里我们选择与nginx匹配的版本:

两个文件如下:

pem结尾的为公钥证书,key结尾的为服务器私钥,私钥一定不要泄露出去。

然后我们通过改写nginx的配置文件nginx.conf来配置https服务器。

server {
 listen 443;
 server_name localhost;
 ssl on;
 root html;
 index index.html index.htm;
 ssl_certificate   cert/a.pem;
 ssl_certificate_key  cert/a.key;
 ssl_session_timeout 5m;
 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
 ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
 ssl_prefer_server_ciphers on;
 location / {
     root html;
     index index.html index.htm;
 }
}

配置有点多,但是主要的是1、4、7、8行的配置。

第一行监听443端口,https默认端口为443,第四行开启ssl,第7行配置公钥证书,第8行配置服务器私钥。

然后重启nginx服务即可。

以上便是用nginx配置https证书的过程及原理

原文发布于微信公众号 - nodejs全栈开发(geekclass)

原文发表时间:2019-09-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券