一、配置OpenSSL生成证书
1、由于是实验,所以要自己安装OpenSSL(官方地址https://www.openssl.org)生成证书,其版本号分为1.1和1.0两个大分支,Centos 7开始使用1.0.2k版本,如果配置的SSL需要达到苹果要求也需要1.0.2版本。1.1依赖的libssl也是1.1版本的,而系统默认的libsso库是1.0版本(ls /usr/lib64/libssl.so.10),所以还是尽量使用1.0版本,如果要用1.1的话可以自行编译安装
wget https://www.openssl.org/source/openssl-1.1.0h.tar.gz
tar zxf openssl-1.1.0h.tar.gz
./config --prefix=/usr/local/openssl #虽然安装包里还有一个configure脚本,但是正确安装方式是使用config脚本
make && make install
openssl version #查看版本
2、OpenSSL安装完成后我们主要用到的就是bin下的openssl命令,该命令用于生成证书文件
3、执行命令生成证书的申请文件和私钥文件
openssl req -nodes -newkey rsa:1024 -out myreq.pem -keyout privatekey.pem
#req:request的简写,代表发出一个申请数字证书的请求
#-nodes:不生成pin码,简化流程
#-newkey:生成新证书并指明加密算法和长度,也可以写成2048
#-out:输出一个请求文件,非密码文件
#-keyout:生成私钥
如果执行该命令提示“error while loading shared libraries: libssl.so.1.1”这种报错,是因为1.1版本的OpenSSL依赖了libssl.so.1.1的库,而系统里默认是没有这个库文件的。好在安装好OpenSSL后再lib目录中提供了该文件,做软连接就可以解决问题
ln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1
ln -s /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
4、运行命令后会要求填写相关信息,然后会在当前目录下生成申请文件和私钥文件
5、使用申请文件和私钥进行证书的申请,自己给自己颁发证书,命令运行后会在当前目录生成证书文件(申请文件以后没用了,可以删除掉了)
1
openssl req -in myreq.pem -x509 -key privatekey.pem -out mycert.pem -days 365
2
-in:用之前的申请文件作为输入
3
-x509:证书格式
4
-key:私钥文件
5
-out:产出的证书文件
6
-days:证书有效期
二、配置Nginx https
要让Nginx支持SSL证书的话需要在编译Nginx的时候开启–with-http_ssl_module,然后在Nginx配置文件中做以下修改:
1
#三个选项都配置在http或者server标签内
2
ssl on;
3
ssl_certificate file;
4
ssl_certificate_key file;
Nginx配置https示例:
01
HTTPS server
02
server {
03
listen 443 ssl;
04
server_name test.com;
05
ssl on;
06
ssl_certificate /usr/local/nginx/ssl/cert.pem; #指定数字证书文件
07
ssl_certificate_key /usr/local/nginx/ssl/cert.key; #指定数字证书私钥文件
08
ssl_session_cache shared:SSL:1m;
09
ssl_session_timeout 5m;
10
ssl_ciphers HIGH:!aNULL:!MD5;
11
ssl_prefer_server_ciphers on;
12
location / {
13
root html;
14
index index.html index.htm;
15
}
16
}
17
server {
18
listen 80;
19
server_name test.com;
20
rewrite (.*) https://
s
e
r
v
e
r
n
a
m
e
server_name
servernamerequest_uri redirect;
21
}
2、启动Nginx服务,查看443端口是否监听,然后在浏览器使用https://IP进行访问测试即可。如果站点是动态页面(比如PHP),那么还需要在ssl所属的server标签内做PHP的配置才可以使用https协议
三、HTTPS服务优化方向
1、激活keepalive长连接,减少客户端请求次数
2、设置SSL session缓存,减少CPU资源消耗
配置示例:
01
server {
02
listen 443 ssl;
03
server_name test.com;
04
keepalive_timeout 100; #开启keepalive
05
ssl on;
06
ssl_certificate /usr/local/nginx/ssl/cert.pem; #指定数字证书文件
07
ssl_certificate_key /usr/local/nginx/ssl/cert.key; #指定数字证书私钥文件
08
ssl_session_cache shared:SSL:10m; #缓存session会话
09
ssl_session_timeout 10m; #session 10分钟过期
10
ssl_ciphers HIGH:!aNULL:!MD5;
11
ssl_prefer_server_ciphers on;
12
location / {
13
root html;
14
index index.html index.htm;
15
}