Nginx使用openssl证书开启https服务

 
 
 
 
 
 
 
 

Openssl


 

SSL原理

基本术语:

  • 加密 —— 使用公钥对数据进行加密的过程
  • 私钥 —— 使用私钥对加密过的数据进行解密的过程
  • 签名 —— 使用私钥对数据进行加密的过程
  • 验证签名 —— 使用公钥对加密过的数据进行解密的过程
     

注:公钥和私钥均可对数据进行加解密,但是只有成对的公私钥才能解开对方的加密

 
 
 
 

HTTP通信

劣势:

  • 通信使用明文,内容容易被窃听
  • 不验证通信双方的身份,因此有可能遭遇伪装(如上了钓鱼网站,电脑中毒)
  • 无法证明报文的完整性,所以有可能被篡改

 
 

SSL

1、SSL 是介于 HTTP 应用层和 TCP 协议层的一个通信接口,具有该层则可称之为 HTTPS,反之则为 HTTP。SSL 独立于 HTTP,不光 HTTP 可以用 SSL,SMTP、Telnet 均可使用 SSL
在这里插入图片描述
 
2、SSL 使用证书保证通信双方都是可靠的实体,目前 HTTPS 使用对称加密和非对称加密(公钥和私钥分开的加密方式)混合加密机制
 
3、非对称加密基本原理:
 
(请求开始)
1、服务器生成公钥和私钥,客户端同样
2、服务器将公钥对外公布,任何人均可获取公钥
3、客户端获取到公开秘钥,并使用其对数据进行加密
4、服务器收到加密后的数据,对数据使用私钥进行解密
 
(响应开始)
5、服务器将响应数据使用私钥进行签名
6、客户端拿到数据使用公钥进行签名验证

 
 
 
 

HTTPS

使用公开秘钥(非对称加密)其处理速度比共享秘钥(对称加密)要慢的多,所以混合使用二者,在保证安全的前提下能尽量的减少效率损失
 

  • 在交换秘钥阶段使用公开秘钥的加密方式(以非对称加密来完成服务器和客户端的公钥互换)
  • 通信建立后的报文互换阶段,使用共享加密的方式进行(建立连接后,后续的通信使用同一个相同的秘钥对数据进行加密、解密, 以提高处理速度)
     

上述过程中仍存在一个问题,就是公开秘钥(非对称加密的公钥)仍有被替换的风险。如瀚世的一台服务器向外公开了公钥,但是寅客的服务器埋伏在路由器前,偷偷把瀚世的公钥给换成了寅客自己的。客户需要对瀚世的数据进行请求时,实际建立上连接的却是寅客的服务器,寅客的服务器就可以获取到客户端的账号、密码等关键信息,并且可以随意对客户进行任意信息的返回
 
为了解决公钥被替换的风险,就要用到 数字证书认证机构(CA,Certificate Authority),这个机构是独立于客户端和服务器的,是广泛被认可的第三方机构。
 
该机构的处理流程如下:

  • 服务器所有者向 CA 机构申请认证自己服务器的公钥
  • CA 机构在判明服务器和所有者相关信息后,对服务器的公钥进行数字签名(使用 CA 自己的私钥),并且将签名放到公钥中(该公钥就可被成为证书了)
  • 服务器将经 CA 机构签名后的公钥(证书)发布出去以供客户端使用
  • 客户端在收到服务器的公钥证书后,使用 CA 机构的公钥对 服务器公钥上的数字签名进行验证,若通过则可进行安全通信(这一步其实是基于对 CA 机构的广泛信任)
     

各浏览器都会将常用的 CA 机构的公开秘钥植入到浏览器内部
在这里插入图片描述

 

https的缺点,综合来说 HTTPS 比 HTTP 慢 2 ~ 100 倍

  • 服务器与客户端都需要进行加密、解密的操作 —— 额外效果 CPU、内存等硬件资源
  • SSL通信部分要占用一些体积 —— 网络传输体积增大
  • 出去TCP连接、发送和响应 HTTP 请求外,还要进行 SSL通信 —— 通信处理的时间延长
     

目前的解决方式:使用 SSL 通信专用硬件,当进行 SSL 处理时,可以分担负载,提升数倍 SSL 的计算速度

 
 
 
 

下载安装

从外网下载速度太慢,丢了个资源到CSDN,不需要安装 Perl 可以直接使用,下载地址 openssl

 

在这里插入图片描述

 

双击开始安装,可以直接一路默认过去
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

 
 
 
 

生成证书

1、生成私钥(这个是要丢到 nginx 上使用的),随便输一个记得住的密码(如:1234)

openssl genrsa -des3 -out server.key 2048
在这里插入图片描述

 

2、创建证书签名请求CSR文件,要输入一些信息

openssl req -new -key server.key -out server.csr
在这里插入图片描述
在这里插入图片描述

 

3、创建验证的附加文件(注意,下面的 IP 和 DNS 改成你自己的)

echo subjectAltName=IP:192.168.1.210,DNS:alun.hispatial.com >cert_extensions
在这里插入图片描述

 

4、生成CA证书(这一步的证书就可以丢到 nginx 里用的)

openssl x509 -req -sha256 -days 3650 -in server.csr -signkey server.key -extfile cert_extensions -out server.crt
 
或者
 
openssl x509 -trustout -req -sha256 -days 3650 -in server.csr -signkey server.key -extfile cert_extensions -out server.crt
在这里插入图片描述

 

5、将CA证书转为 pkcs 证书(若失败则使用第四步的 crt 证书,ArcGIS Enterpri 使用 pfx)

openssl pkcs12 -inkey server.key -in server.crt -export -out server.pfx
在这里插入图片描述
在这里插入图片描述

 
 
 
 

Nginx配置


worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       8531;
        server_name  192.168.1.210;
		autoindex on;       

        location / {
            root   D:\codes\webgis;
            index  index.html index.htm;
        }
		
        location = /50x.html {
            root   html;
        }
    }
	
	server {
        listen       8532 ssl;
        server_name  192.168.1.210;
		autoindex on;

		ssl_certificate      ./cert/server.crt;
        ssl_certificate_key  ./cert/server.key;
		
		ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout 5m;   
        ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers "HIGH:!aNULL:!MD5 or HIGH:!aNULL:!MD5:!3DES";
        ssl_prefer_server_ciphers on;

        error_page   500 502 503 504  /50x.html;

        location / {
            root   D:\codes\webgis;
            index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}
posted @ 2022-06-05 20:49  阿伦alun  阅读(437)  评论(0编辑  收藏  举报