1 证书
之前我们使用的是自签名的SSL证书,对于浏览器来说是无效的。使用权威机构颁发的SSL证书浏览器才会认为是有效的,这里给大家推荐两种申请免费SSL证书的方法,一种是从阿里云申请,https://common-buy.aliyun.com/?spm=5176.2020520163.0.0.e8f856a74ReRXh&commodityCode=cas 链接地址
另一种是从FreeSSL申请。
使用acme.sh自动申请证书
acme.sh脚本实现了acme协议, 可以从letsencrypt生成免费的证书。一般我们申请的证书有效期都是1年,过期就要重新申请了,使用acme.sh脚本可以实现到期自动申请,再也不用担心证书过期了!
腾讯云申请
2 nginx配置
server {
listen 80;
server_name www.domain.com ;
rewrite ^(.*)$ https://$server_name$1 permanent;
#rewrite ^(.*)$ https://$host$1;
# return 301 $scheme://$server_name$request_uri;
#rewrite ^(.*)$ https://www.xxx.com$1;
}
server {
listen 443 ssl http2;
server_name www.domain.com;
ssl_certificate /usr/local/key/1_www.domain.com_bundle.crt;
ssl_certificate_key /usr/local/key/2_www.domain.com.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_prefer_server_ciphers on;
location / {
root html;
index index.html index.htm;
}
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
expires 30d;
}
location ~ .*\.(js|css)?$ {
expires 12h;
}
注意
Nginx 1.15.0以上版本请使用listen 443 ssl代替listen 443和ssl on
–with-http_ssl_module
3 参数
SSL常用命令
1)ssl
该指令用来指定服务器开启HTTPS,可以使用 listen 443 ssl,后面这种方式更通用些
配置格式:
server{
listen 443 ssl;
}
2)ssl_certificate
为当前这个虚拟主机指定一个带有PEM格式证书的证书
3) ssl_certificate_key
该指令用来指定PEM secret key文件的路径
4) ssl_session_cache
该指令用来配置用于SSL会话的缓存
5) off
禁用会话缓存,客户端不得重复使用会话
6) none
禁止使用会话缓存,客户端可以重复使用,但是并没有在缓存中存储会话参数
7) builtin
内置OpenSSL缓存,仅在一个工作进程中使用
8)shared
所有工作进程之间共享缓存,缓存的相关信息用name和size来指定
9)ssl_session_timeout
开启SSL会话功能后,设置客户端能够反复使用储存在缓存中的会话参数时间
- ssl_ciphers
指出允许的密码,密码指定为OpenSSL支持的格式(可以使用openssl ciphers查看openssl支持的格式)
ssl_prefer_server_ciphers
该指令指定是否服务器密码优先客户端密码
4 自定义证书
mkdir /root/cert
cd /root/cert
openssl genrsa -des3 -out server.key 1024
openssl req -new -key server.key -out server.csr
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
5 nginx配置参数详解
server{
listen 443 ssl;
server_name ab.text.com ; #指定域名(也可以是ip)多个域名用空格隔开
ssl_certificate /opt/app/nginx/conf/cert/ngxdefault.crt; #添加server.pem访问路劲(第一个证书文件路劲)
ssl_certificate_key /opt/app/nginx/conf/cert/ngxdefault.key; #添加server.key访问路劲(第二个证书文件访问路劲)
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH"; #是一种加密算法
ssl_protocols TLSv1.1 TLSv1.2; #启用指定协议(使用哪种加密协议支持ssl版本)
ssl_prefer_server_ciphers on; #指定在使用SSLv3和TLS协议时,服务器密码应优先于客户端密码。)
ssl_session_cache shared:SSL:10m; #1m大约可以存储4000个TLS握手,当某个https连接在规定时间重连时,可以通过session_cahce重用TLS秘钥,也就是client只要发起一次http请求就可以再次进行连接。根据TLS通讯过程,如果你的https开启了session_cache,在第二步,server获取到client请求就会去读取session_cache文件,如果存在client的key就直接复用,进行数据传输。
设置存储会话参数的高速缓存的类型和大小。缓存可以是以下任何一种类型:
off
严禁使用会话缓存:nginx明确告诉客户端会话可能不会被重用。
none
会话缓存的使用被轻轻地禁止:nginx告诉客户端会话可能被重用,但实际上不会将会话参数存储在缓存中。
builtin
建立在OpenSSL中的缓存; 仅由一个工作进程使用。缓存大小在会话中指定。如果没有给出大小,则等于20480个会话。内置缓存的使用可能导致内存碎片。
shared
所有工作进程之间共享的缓存。缓存大小以字节为单位指定; 一兆字节可以存储大约4000个会话。每个共享缓存都应该有一个任意的名字。具有相同名称的缓存可以在多个虚拟服务器中使用。
两种缓存类型都可以同时使用,例如:
ssl_session_cache builtin:1000 shared:SSL:10m;
注意:但只使用没有内置缓存的共享缓存应该更有效率。
ssi on; #服务器嵌套,主要是实现网站的内容更新,时间和日期的动态显示,以及执行shell和CGI脚本程序等复杂的功能。
ssi_silent_errors on; #默认是off,开启后在处理SSI文件出错时不输出错误提示:”[an error occurred while processing the directive] ”
#ssi_types #默认是支持ssi_types text/html 如果需要shtml支持,则需要设置:ssi_types text/shtml
#适用于http,server,location等模块
}
6 https工作流程
7 https协议
HTTP协议是由HTTP协议和SSL/TLS协议共同组建提供加密传输及身份验证的网络协议,信息传输是通过HTTP协议来完成,身份加密及验证是通过TLS协议来完成,其中对称加密及非对称加密都是属于TLS协议的算法。
目前主流TLS协议版本是TLS1.2,主推版本是TLS1.3,反正是TLS1.1,TLS1.2,TLS1.3共存。
TLS 1.3 是时隔九年对 TLS 1.2 等之前版本的新升级,也是迄今为止改动最大的一次。针对目前已知的安全威胁,IETF 正在制定 TLS 1.3 的新标准,使其有望成为有史以来最安全,但也最复杂的 TLS 协议。
简单来说TLS1.3无论在安全加密,数据传输方面完虐TLS1.2,不过现在还处于草案阶段,虽然被很多浏览器支持,但是不建议部署在生产服务上。
TLS的通讯过程
8 实现https的算法种类
什么是对称加密?
client 通过算法F根据秘钥A对数据进行加密,那么server端就可以通过算法F根据秘钥A对数据进行解密,整个加密解密过程都是使用一个私钥,所以被称为对称加密。
根据算法规则,client跟server都是使用通过一个秘钥进行解密加密,如果秘钥被截取很容易造成数据泄露。
同时如果服务端每次都针对不同的客户端存储一个私聊,当客户端数量庞大时,光服务器的存储的私钥都能造成server成本剧增。
什么是非对称加密?
client向server请求公钥,对数据进行加密,在将加密的数据发送给server,然后server通过秘钥进行解密,得到原始数据,但是是加密是通过公钥,解密是通过私钥,整个加密解密过程,秘钥是不同的,熟称非对称加密。
在整个非对称加密过程中,公钥及私钥都是server端的,基本保证数据由client传输到server是安全的,但是由server发向client的数据就不能使用公钥进行加密,所以这部分数据传输是不安全的。
从对称加密及非对称加密的原理来看,单独的其中一个都没法满足要求,那么就结合2者的优势。
9 https简易工作流程
总的思路:利用非对称加密的方式,使celient与server协商一个临时key,然后通过对称加密的方式将协商的key进行数据传输。
1.client利用非对称加密的方式向server端获取公钥,并且server端会返回它公钥 #此时 server 存在一个公钥及私钥 client 存在 公钥
2.client随机将数据A通过公钥进行加密为D1发给sever端
3.server端通过私钥对D1进行解密得到数据A,并且与client进行协商,以A作为临时key进行数据传输。
4.当整个数据传输完成,临时Key A 将被从服务器里删除。
通过https的流程可以看出只要有公钥及私钥就可以实现安全传输,从原理上分析是没有问题的,
但是存在个问题,如果在中间插入第三者A,那么对于client而言,A就是server,那么怎么能最大限度的避免这个问题了?
那就需要引入数字签名的概念了。
10 什么是数字签名
B1现在手上有2把要是,分别是公钥及私钥。然后分别把公钥送给了B2,B3,B4。
现在B2决定给B1写一份私密性,并且使用公钥进行加密,这个时候,也只有B1通过私钥进行解密才能得到信的内容。
B1看到信的内容后,决定在回一封信,但是需保证B2拿到的信是完整的,那就对信的摘要进行哈希运算,
得带一个值 就是 "数字签名",然后将这个值(签名)使用私钥进行加密,最后将数字签名,信一起发给B2.
B2收到B1的信后,获取信件及数字签名。然后使用公钥对信的摘要进行解密,在进行哈希运算,
如果跟B1发送的一样,则信没有被修改,是完整的,在通过协商的私钥对信的内容进行解密,得到信的内容。
在B1给信使用哈希运算及使用私钥加密的过程就叫数字签名。
11 什么是CA
CA是颁发证书的权威机构,主要功能是负责证书签发,证书认证,证书管理。
12 什么是数字证书
数字证书主要是用来认证公钥持有者的身份合法的电子文档,已防止第三方冒充。
数字证书是由CA机构颁发的证书,包含证书颁发机构名称,有效期限,证书的公钥,证书的主题,签名所使用的算
法,准确来说是由PKI体系规范了证书内容。
当然一般的数字证书都是要钱的,同时在阿里云,腾讯云也可以申请单域名的数字证书,这个是免费的,名额有限。
13 从CA方面签发证书的过程
签发过程:
(CA)
1.服务机构向CA申请ssl证书,需提供一些相关证书验证信息,申请的证书级别不同需要验证的证书信息就不同,费用也不同,比如
在腾讯云申请免费的ssl证书,只需提供域名及对应的邮箱。
2.CA机构对你的提供的信息进行验证,验证成功过后,生成ssl证书。当前证书只包含你申请的一些信息,例如:证书签发人,签发地
址,签发时间,有效期,证书持有者基本信息
3.CA使用hash算法对证书进行计算,得到一个hash值,称呼为 数字摘要(也叫数字指纹),这个hash算法也叫指纹算法。
4.CA机构通过自己的私钥对数字摘要,指纹算法进行加密,形成数字签名。
5.CA机构将数字签名+数字证书+元数据组合一起,形成一个 有签名的数字证书
5.然后将数字证书+服务机构私钥+CSR文件打包发送给服务机构。
验证证书:
(client)
1.当client向server端发起https请求时,server会将CA机构颁布的证书文件+数字签名发送给client。
2.客服端通过内置信任的CA机构公钥对数字前面进行解密
3.然后采取同样的算法对证书进行哈希运算,得到哈希值,如果与发过来的摘要一样,代表证书是可信的,只要证书的任意值被修改,
hash值就会变化。
4.验证通过后,client就可以跟server进行正常的https请求流程了。
注:在整个过程中,CA的公钥是内置在浏览器或者操作系统的,主要用来解密数字签名。而服务器的公钥是存在ssl证书里的,主要用于
秘钥协商。
14 防止中间人攻击
那就得靠这个CA签发的数字签名,因为CA机构的私钥就只有他自己,而别人没有的,如果中间人对证书传输的证书进行修改,在进行
加密,client就算利用中间人的公钥进行解密,也会发现数字签名的哈希值不对等,因此判定证书被修改。
hash算法可以保证值的唯一性,不可修改性,只要文件的一个字符出现变化,hash值也会随之出现变化,当然也不是绝地安全的,根据
hash算法的不同,可以定义不同安全的级别。
15 SSL证书类型
一般来说SSL证书分为3类,分别是域名型(DV)SSL证书,企业型(OV)SSL证书,增强型(EV)SSL证书。
域名型SLL证书又称DV 证书,安全等级一般,证书颁布机构只要验证网站的真实性即可颁布此证书保护网站,进行网站重要信息加密,一般用于软件下载站。
企业型SSL证书又称OV 证书,安全等级高于DV证书,申请者需要填写一些组织机构资料提交于证书颁布机构,经过通过证书颁布机构严格审核,方可颁布。在整个过程中,证书机构不仅要确定网站的真实性,还要对您提交资料信息的准确性进行多方查验,均没问题方可通过,适合用于电商类型网站。文章来源:https://www.toymoban.com/news/detail-479804.html
增强型SSL证书又称EV证书,安全等级最高,申请条件更复杂,验证流程更多,并且使用增强型SSL证书的网站,在网址前端会变成绿色,很好辨认,一般用于银行证券等机构。文章来源地址https://www.toymoban.com/news/detail-479804.html
到了这里,关于Nginx配置https及证书的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!