Nginx部署SSL证书
本文最后更新于 2024-10-15,文章内容距离上一次更新已经过去了很久啦,可能已经过时了,请谨慎参考喵。
title: SSL证书的部署
tags:
- SSL
categories:
- Linux
top_img: false
cover: '/upload/cdn0files/20200721124356.png'
abbrlink: ef0be786
date: 2019-12-09 09:06:07
updated: 2019-12-09 09:06:07
什么是SSL证书,为什么需要它?
SSL证书是数字证书的一种,类似于驾驶证、护照和营业执照的电子副本。因为配置在服务器上,也称为SSL服务器证书。
SSL 证书就是遵守 SSL协议,由受信任的数字证书颁发机构CA,在验证服务器身份后颁发,具有服务器身份验证和数据传输加密功能。
具体请查阅:https://baike.baidu.com/item/SSL%E8%AF%81%E4%B9%A6/5201468?fr=aladdin
准备事项
- 需要购买和申请SSL证书
阿里云,腾讯云等服务商都提供SSL证书购买服务,可以直接去申请,有很多版本和配置可供选择,我选择了阿里云免费提供的一年ssl证书。(推荐在自己的域名服务商购买,进行验证的时候会方便很多)
- 下载和上传证书文件
购买成功后会进行域名验证,请根据服务商提示完成验证。验证成功后大概几分钟就会签发成功,此时去证书管理控制台进行下载。
下载证书时记得下载自己服务器对应的版本。下载到本地之后进行解压,会看到一个key文件和crt(或者pem)文件。
文件上传可使用rz和sz命令:
$ yum install -y lrzsz
命令用法自行百度。
安装证书和配置服务器
本文档以CentOS 7、Nginx 1.16.1为例
- 首先查看主配置文件中http所包含域。
注:不是server域而是http。
$ cat /etc/nginx/nginx.conf
结果如下:
- 在此目录下新建一个配置文件
$ vim /etc/nginx/conf.d/ssl.conf
写入配置:
以下属性中以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;
}
}
保存退出。
- 查看SSL证书安装目录
$ cat /etc/nginx/nginx.conf
找到以下目录:
把上传到服务器的SSL证书(pem和key文件)分别放在指定目录即可。
- 测试是否生效
$ nginx -t
如果配置成功,则显示结果如下:
- 可能遇到的错误(务必不要完全执行,只是参考作用,数据无价做好备份)
(1)配置文件错误,无法生效
检查配置文件语法、单词等正确。
(2)unknown directive “ssl” in /etc/nginx/conf.d/ssl.conf:121
部署SSL要用到nginx中的SSL模块,但是我们一开始编译nginx的时候并没有把SSL模块也一起编译进去,所以导致这个问题的出现。
安装openssl:
$ yum -y install openssl openssl-devel
在/usr/local/nginx-1.14.2(即Nginx安装目录)执行编译ssl模块:
$ ./configure --with-http_ssl_module
$ make
备份、转移
$ cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
$ cp objs/nginx /usr/local/nginx/sbin/nginx
查看是否将ssl模块编译进来
//当看到以下信息说明成功!
$ ./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
$ cd /usr/local/nginx/sbin
$ ./nginx -s reload
这次部署就到这里。
注意注意注意:
请务必一定要考虑清楚操作后果,个人情况不同,机况不同,结果自然不同,我的经历和过程只能给您起到参考作用,一定务必不要完全按照我的过程去完成,最后,数据无价,做好备份工作。