什么是SSL证书,为什么需要它?

SSL证书是数字证书的一种,类似于驾驶证、护照和营业执照的电子副本。因为配置在服务器上,也称为SSL服务器证书。

SSL 证书就是遵守 SSL协议,由受信任的数字证书颁发机构CA,在验证服务器身份后颁发,具有服务器身份验证和数据传输加密功能。

具体请查阅:https://baike.baidu.com/item/SSL%E8%AF%81%E4%B9%A6/5201468?fr=aladdin

准备事项

  1. 需要购买和申请SSL证书

阿里云,腾讯云等服务商都提供SSL证书购买服务,可以直接去申请,有很多版本和配置可供选择,我选择了阿里云免费提供的一年ssl证书。(推荐在自己的域名服务商购买,进行验证的时候会方便很多)

3

  1. 下载和上传证书文件

购买成功后会进行域名验证,请根据服务商提示完成验证。验证成功后大概几分钟就会签发成功,此时去证书管理控制台进行下载。

4

下载证书时记得下载自己服务器对应的版本。下载到本地之后进行解压,会看到一个key文件和crt(或者pem)文件。

文件上传可使用rz和sz命令:

1
$ yum install -y lrzsz

命令用法自行百度。

安装证书和配置服务器

本文档以CentOS 7、Nginx 1.16.1为例

  1. 首先查看主配置文件中http所包含域。

注:不是server域而是http。

1
$ cat /etc/nginx/nginx.conf

结果如下:

5

  1. 在此目录下新建一个配置文件
1
$ vim /etc/nginx/conf.d/ssl.conf

写入配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
以下属性中以ssl开头的属性代表与证书配置有关,其他属性请根据自己的需要进行配置。
server {
listen 443 ssl; #SSL协议访问端口号为443。此处如未添加ssl,可能会造成Nginx无法启动。
server_name localhost; #将localhost修改为您证书绑定的域名,例如:www.example.com。
root html;
index index.html index.htm;
ssl_certificate cert/domain name.pem; #将domain name.pem替换成您证书的文件名。
ssl_certificate_key cert/domain name.key; #将domain name.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;
}
}
可选: 设置HTTP请求自动跳转HTTPS
server {
listen 80;
server_name localhost; #将localhost修改为您证书绑定的域名,例如:www.example.com。
rewrite ^(.*)$ https://$host$1 permanent; #将所有http请求通过rewrite重定向到https。
location / {
index index.html index.htm;
}
}

保存退出。

  1. 查看SSL证书安装目录
1
$ cat /etc/nginx/nginx.conf

找到以下目录:

6

把上传到服务器的SSL证书(pem和key文件)分别放在指定目录即可。

  1. 测试是否生效
    1
    $ nginx -t
    如果配置成功,则显示结果如下:

7

  1. 可能遇到的错误(务必不要完全执行,只是参考作用,数据无价做好备份)

(1)配置文件错误,无法生效

8

检查配置文件语法、单词等正确。

(2)unknown directive “ssl” in /etc/nginx/conf.d/ssl.conf:121

部署SSL要用到nginx中的SSL模块,但是我们一开始编译nginx的时候并没有把SSL模块也一起编译进去,所以导致这个问题的出现。

安装openssl:

1
$ yum -y install openssl openssl-devel

在/usr/local/nginx-1.14.2(即Nginx安装目录)执行编译ssl模块:

1
2
$ ./configure --with-http_ssl_module
$ make

备份、转移

1
2
$ cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
$ cp objs/nginx /usr/local/nginx/sbin/nginx

查看是否将ssl模块编译进来

1
2
3
4
5
6
7
//当看到以下信息说明成功!
$ ./nginx -V
nginx version: nginx/1.14.2
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC)
built with OpenSSL 1.0.2k-fips 26 Jan 2017
TLS SNI support enabled
configure arguments: --with-http_ssl_module

重新启动nginx

1
2
$ cd /usr/local/nginx/sbin
$ ./nginx -s reload

这次部署就到这里。

注意注意注意:

请务必一定要考虑清楚操作后果,个人情况不同,机况不同,结果自然不同,我的经历和过程只能给您起到参考作用,一定务必不要完全按照我的过程去完成,最后,数据无价,做好备份工作。