Nginx配置https及证书

  • 1 证书
  • 2 nginx配置
  • 3 参数
  • 4 自定义证书
  • 5 nginx配置参数详解
  • 6 https工作流程
  • 7 https协议
  • 8 实现https的算法种类
  • 9 https简易工作流程
  • 10 什么是数字签名
    • 11 什么是CA
    • 12 什么是数字证书
    • 13 从CA方面签发证书的过程
    • 14 防止中间人攻击
    • 15 SSL证书类型

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会话功能后,设置客户端能够反复使用储存在缓存中的会话参数时间

  1. 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证书,申请者需要填写一些组织机构资料提交于证书颁布机构,经过通过证书颁布机构严格审核,方可颁布。在整个过程中,证书机构不仅要确定网站的真实性,还要对您提交资料信息的准确性进行多方查验,均没问题方可通过,适合用于电商类型网站。

增强型SSL证书又称EV证书,安全等级最高,申请条件更复杂,验证流程更多,并且使用增强型SSL证书的网站,在网址前端会变成绿色,很好辨认,一般用于银行证券等机构。

Nginx配置https及证书相关推荐

  1. Nginx配置https(ssl证书)并反向代理Springboot Jar项目

    下载安装NGINX # 下载NGINX: yum install nginx # 启动nginx: systemctl start nginx # 加入开机启动: systemctl enable n ...

  2. Ubuntu 17.04 编译安装 Nginx 1.9.9 配置 https 免费证书

    Ubuntu 17.04 编译安装 Nginx 1.9.9 配置 https 免费证书 安装 Nginx 安装依赖 $ apt-get update $ apt-get install build-e ...

  3. linux location root访问文件夹404_如何使网站支持https访问?nginx配置https证书

    购买SSL证书 要想使用https访问你的网址,首先得拥有颁发的SSL证书.我使用的是免费版,有效期为一年,过期后再重新申请. 申请SSL证书 购买后,可在搜索框输入证书关键字进入到控制台. 点击证书 ...

  4. nginx配置https双向验证(ca机构证书+自签证书)

    nginx配置https双向验证 服务端验证(ca机构证书) 客户端验证(服务器自签证书) 本文用的阿里云签发的免费证书实验,下载nginx安装ssl,文件夹有两个文件 这两个文件用于做服务器http ...

  5. 免费ssl证书申请以及nginx配置https访问攻略

    攻略背景 最近需要为我哥的协会申请ssl证书,因为小程序接口需要https.于是开启了这一番折腾,最后简化为一篇攻略. 第一步,申请SSL证书 这个网站最好,可以申请到1年的,其他都是三个月.1年后再 ...

  6. 【教程】Linux下Https证书生成,与Nginx配置https

    Linux系统Https证书生成与Nginx配置https 证书生成 查看openssl 生成证书 Nginx配置https(默认443端口) 证书生成 查看openssl 1,我们在linux系统下 ...

  7. Nginx配置免费SSL证书

    SSL证书HTTPS优势 购买域名型免费版(DV)SSL证书 安装SSL证书:参考官方文档 nginx中的配置:nginx配置https转发到tomcat server {listen 443;ser ...

  8. 1 阿里云Nginx配置https实现域名访问项目

    第一步:签署第三方可信任的 SSL 证书 证书可以直接在阿里云里面申请免费的ssl证书 登录阿里云账号,在上方搜索栏内搜索ssl,点击ssl证书(应用安全) 来到这个页面后点击购买证书 如图选择免费版 ...

  9. 腾讯云Nginx配置https

    1. 申请ssl证书(腾讯云为例) 登录腾讯云的控制台 https://console.cloud.tencent.com/ssl 申请免费证书 确认申请 如果是腾讯云的域名就选择自动DNS,不是的话 ...

  10. Nginx配置https访问

    在这里我使用的是阿里云ECS,里面提供一年免费SSL证书 1.什么是HTTPS 根据维基百科的解释: 超文本传输安全协议(缩写:HTTPS,英语:Hypertext Transfer Protocol ...

最新文章

  1. java 监听队列_spring+activemq实战之配置监听多队列实现不同队列消息消费
  2. java成员变量的初始化
  3. YugaByte DB 分布式 开源 关系型数据库介绍
  4. java 格式化输出
  5. Google数据集搜索神器上线,和搜索论文一样简单 | 还不去训练网络?
  6. 路人实拍Waymo无人车:行为诡异,谨慎到让人怀疑人生
  7. Dreamweaver CS5.5+PhoneGap移动开发环境搭建
  8. 都是过客,相煎何急?
  9. 7-8 评委打分 (5 分)
  10. 框架整合——Spring与MyBatis框架整合
  11. 第二空间计算机最新破解,雨过天晴海外版 电脑时光机 - RollBack Rx v10.2.2699597837 多国语言特别版...
  12. dcs world f15c教学_苏教版译林牛津高中英语必修1-5选修6-11课文听力MP3音频字幕课件教案试题电子课本优质课教学视频...
  13. windows下cmd批量复制文件
  14. CS61A第一章笔记
  15. 在Word中如何设置分级标题?
  16. 编译超频Android内核,安卓超频工具apk下载
  17. STM32L431之SPI从模式使用DMA时数据偏移3个字节
  18. 教育邮箱申请office365激活失败处理
  19. NoSQL:列族数据库
  20. 【原创】CSS3 制作奥林匹克五环

热门文章

  1. 题目 1097: 蛇行矩阵
  2. postman中变量设置
  3. 【观察】嵌入式AI崛起,这里有一本通关“秘籍”
  4. 求生之路4的联机方法和秘籍
  5. Ubuntu ROS下Conda的最好安装方式
  6. webstorm搜狗输入法变成繁体字
  7. Redis技能—底层IO多路复用
  8. oracle使用with as 提升查询效率
  9. python解决乱码转成中文
  10. 前端学习从入门到高级全程记录之43 (PHP基础Ⅵ)