Nginx配置https及证书

这篇具有很好参考价值的文章主要介绍了Nginx配置https及证书。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 证书

之前我们使用的是自签名的SSL证书,对于浏览器来说是无效的。使用权威机构颁发的SSL证书浏览器才会认为是有效的,这里给大家推荐两种申请免费SSL证书的方法,一种是从阿里云申请,https://common-buy.aliyun.com/?spm=5176.2020520163.0.0.e8f856a74ReRXh&commodityCode=cas 链接地址
Nginx配置https及证书

另一种是从FreeSSL申请。
使用acme.sh自动申请证书
acme.sh脚本实现了acme协议, 可以从letsencrypt生成免费的证书。一般我们申请的证书有效期都是1年,过期就要重新申请了,使用acme.sh脚本可以实现到期自动申请,再也不用担心证书过期了!
Nginx配置https及证书

腾讯云申请
Nginx配置https及证书
Nginx配置https及证书
Nginx配置https及证书

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

Nginx配置https及证书
Nginx配置https及证书
Nginx配置https及证书

Nginx配置https及证书

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工作流程

Nginx配置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的通讯过程
Nginx配置https及证书

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证书的网站,在网址前端会变成绿色,很好辨认,一般用于银行证券等机构。文章来源地址https://www.toymoban.com/news/detail-479804.html

到了这里,关于Nginx配置https及证书的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • NGINX 配置本地HTTPS(免费证书)

    生成秘钥key,运行: 会有两次要求输入密码,输入同一个即可。输入密码然后你就获得了一个server.key文件。 以后使用此文件(通过openssl提供的命令或API)可能经常回要求输入密码,如果想去除输入密码的步骤可以使用以下命令: 创建服务器证书的申请文件server.csr,运行: 其中Country

    2024年02月03日
    浏览(38)
  • openssl生成https证书及nginx https配置

    一、nginx根目录下创建 cert 目录,用于存放https证书 二、openssl生成https证书证书 三、nginx配置https 参考文档:         https://blog.51cto.com/u_481814/1835713         https://www.cnblogs.com/caidingyu/p/11904277.html

    2024年02月10日
    浏览(40)
  • 【Nginx】使用自生成证书配置nginx代理https

    使用Nginx代理HTTPS请求并使用自签名证书,可以按照以下步骤进行配置: 生成自签名证书: 打开终端或命令提示符,并导航到Nginx配置文件所在的目录。 运行以下命令生成自签名证书和私钥: openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout ssl.key -out ssl.crt 根据提示输入证书的相

    2024年01月18日
    浏览(63)
  • Windows下nginx配置HTTPS证书

    官网下载:openSSL: http://slproweb.com/products/Win32OpenSSL.html 1、双击 Win64OpenSSL_Light-3_1_0.exe 2、安装 openssl 3、选择安装路径:安装在nginx根目录下。 4、接下来默认即可,一直点击 Next。一直到finish。 1)在系统变量中添加 OpenSSL ,地址为安装路径。 右击此电脑 --》点击属性 --》点击

    2024年02月04日
    浏览(45)
  • 配置https---Nginx认证ssl证书

    nginx作为前端的负载均衡服务器已经很熟悉了,项目需要使用https安全的时候就需要认证证书了 dockerweb管理工具 Portainer 如果对docker不那么熟悉可以使用docker 第三方管理端 然后访问本地9000端口,登录后可以管理容器镜像 有了该工具可以直接进入容器查看日志等操作 nginx环境安装

    2024年01月19日
    浏览(50)
  • nginx配置ssl证书使用https访问

    一:申请证书,我使用的是阿里云免费证书 二:下载证书,解压到服务器上 两个文件:www.xx.com.pem和www.xx.com.key 三:打开配置文件/usr/local/nginx/conf/nginx.conf 放开端口443,替换ssl_certificate和ssl_certificate_key为自己证书路径    server {         listen       443 ssl;         server_na

    2024年01月20日
    浏览(56)
  • Nginx配置ssl证书实现https安全访问

    目录 一、Nginx的安装与配置 安装步骤 二、SSL证书获取 三、Nginx配置 前题条件,拥有服务器与可以解析到该服务器的自己的域名。 若已安装好了Nginx,则需查看自己的Nginx是否开启了SSL的模块功能:  显示如上,则代表ssl功能已开启,否则可能出现以下错误提示: nginx: [emer

    2024年02月15日
    浏览(38)
  • 配置SSL证书后,Nginx的HTTPS 不能正常

    申请ssl证书,配置nginx支持https与证书,可是访问https的nginx总是出现错误,也导致小程序发https请求失败,这是什么原因呢? 如果在配置SSL证书后,Nginx的HTTPS无法正常工作,可能有以下几个常见原因: 1、证书配置错误: 证书文件路径出现错误或不存在;文件格式错误;证书

    2024年02月03日
    浏览(44)
  • nginx编译以及通过自定义生成证书配置https

    nginx安装编译安装以及配置https,需要 gcc-c++ pcre-devel openssl openssl-devel 软件。因此需要先安装相关软件。 openssl/openssl-devel :主要用于nginx编译的 http_ssl_module 模块安装以及证书的生成。 依次执行如下命令: 解压压缩包 执行属性配置 http_ssl_module:支持配置https模块 –prefix=/us

    2024年02月14日
    浏览(34)
  • Linux nginx实现访问,配置ssl证书实现https访问

    注意:服务器需要开通80端口 (1)alias: alias指定的路径是location的别名,不管location的值怎么写,资源的 真实路径都是 alias 指定的路径 例如:同样请求 http://xxx.com/upload/top.gif 时,在服务器查找的资源路径是: /www/wwwroot/upload/top.gif (2)root:真实的路径是root指定的值加上

    2024年02月01日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包