使用OpenSSL实现https

一、配置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
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值