https加密

Web网站的登录页面通常都会使用https加密传输的,加密数据以保障数据的安全,HTTPS能够加密信息,以免敏感信息被第三方获取,所以很多银行网站或电子邮箱等等安全级别较高的服务都会采用 HTTPS协议,HTTPS其实是有两部分组成:HTTP + SSL / TLS,也就是在HTTP上又加了一层处理加密信 息的模块.服务端和客户端的信息传输都会通过TLS进行加密,所以传输的数据都是加密后的数据.
https实现过程
第一,客户端向服务器发https请求(443端口)
第二,服务器把自己的证书发给客户端,证书其实就是服务器的公钥
第三,客户端验证证书是有效的,生成随机数,如果证书有问题,会弹出警告
第四,客户端利用证书得到的信息,用服务器的公钥对随机数进行加密,传到服务器
第五,因为信息是拿服务器得公钥做的加密,服务器则利用自己的私钥对信息解密,得到随机数
第六,服务器得到随机数后,拿随机数作为后续得会话密钥(即对称密钥)进行加密数据,通讯双方都有随机数,互相就可以通讯了。
阿里云证书使用教程(有阿里云域名不用单独购买证书)
1、登录阿里云--工作台--搜索SSL证书--立即购买(有域名可免费购买20个证书)
2、云解析DNS--点击域名--添加记录--填写主机记录和记录值
2、创建证书--刷新后证书申请--下一步验证DNS信息是否填写正确--提交审核--下载证书给nginx使用
生成key和pem文件
key是私钥
pem是用户的证书和颁发证书的CA的证书
在nginx中使用证书,https 配置参数
nginx 的https 功能基于模块ngx_http_ssl_module实现,因此如果是编译安装的nginx要使用参数 ngx_http_ssl_module开启ssl功能,但是作为nginx的核心功能,yum安装的nginx默认就是开启的,编译安装的nginx需要指定编译参数--with-http_ssl_module开启

官方文档

https://nginx.org/en/docs/http/ngx_http_ssl_module.html

 server {
        listen              443 ssl;
        ssl_certificate     /usr/local/nginx/conf/cert.pem;
        ssl_certificate_key /usr/local/nginx/conf/cert.key;
        
Syntax: ssl on | off;
Default:    ssl off;
Context:    http, server

配置参数如下

#为指定的虚拟主机配置是否启用ssl功能      listen 443 ssl http2;
#指向包含当前虚拟主机和CA的两个证书信息的文件,一般是crt文件    ssl_certificate /path/to/file;
#当前虚拟主机使用的私钥文件,一般是key文件                   ssl_certificate_key /path/to/file;
#支持ssl协议版本,早期为ssl现在是TLS,默认为后三个,最新的浏览器已经不再支持TLS1.0和TLS1.1
ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2];

#配置ssl缓存 ssl_session_cache off | none | [builtin[:size]] [shared:name:size];
off关闭缓存 none #通知客户端支持ssl session cache,但实际不支持  (建议开启)
builtin[:size]:#使用OpenSSL内建缓存,为每worker进程私有,使用此内置缓存可能会导致内存碎片
#在各worker之间使用一个共享的缓存,需要定义一个缓存名称和缓存空间大小,1M可以存储4000个会话信息,多个虚拟主机可以使用相同的缓存名称    [shared:name:size]
#客户端连接可以复用ssl session cache中缓存的有效时长,默认5分钟   ssl_session_timeout time;、

范例:
server {
    listen 80 ;
    listen 443 ssl http2;
    ssl_certificate     /apps/nginx/certs/m50.wangxiaochun.com.pem;
    ssl_certificate_key /apps/nginx/certs/m50.wangxiaochun.com.key;
    server_name m50.wangxiaochun.com;
    root /data/nginx/html/pc/;
}
[root@ubunt certs]# mkdir /apps/nginx/certs/ 创建存放证书的目录
把申请的证书拉到这个目录
[root@ubunt certs]# ls
m50.wangxiaochun.com.key  m50.wangxiaochun.com.pem
配置里面路径写证书的路径,且为哪个网站申请的证书,就填写哪个网站域名,如果不一致,会报警告。
nginx -s reload
访问:http://m50.wangxiaochun.com/
访问:https://m50.wangxiaochun.com/
成功   可以改成crt后缀在windows上查看证书详细信息

也可用自生成证书做网站的证书

范例
脚本生成两个证书(颁发给www.meng.org)
查看证书并改成和网站一样的名
[root@ubunt data]# lsmeng.org
cacert.pem  master.crt  master.key  slave.crt  slave.key
cakey.pem   master.csr  slave.csr
[root@ubunt data]# mv master.key www.meng.org.key
[root@ubunt data]# cat master.crt cacert.pem > www.meng.org.pem
[root@ubunt data]# mv www.meng.org.* /apps/nginx/certs/
[root@ubunt certs]# ls
www.meng.org.key  www.meng.org.pem
[root@ubunt ~]# vim /apps/nginx/conf/conf.d/www.meng.org.conf
server {
    listen 80 ;
    listen 443 ssl http2;
    ssl_certificate     /apps/nginx/certs/www.meng.org.pem;
    ssl_certificate_key /apps/nginx/certs/www.meng.org.key;
    server_name www.meng.org;
    root /data/nginx/html/pc/;
}
[root@ubunt ~]# nginx -s reload
去网站访问可以了。