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 cert.key 2048
在这里插入图片描述

 

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

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

 

3、复制一份 key 用以消除 key 的密码

copy cert.key cert.key.copy
在这里插入图片描述

 

4、消除 key 的密码

openssl rsa -in cert.key.copy -out cert.key
在这里插入图片描述

 

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

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

 

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

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

 

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

openssl pkcs12 -inkey cert.key -in cert.crt -export -out cert.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;
        }
    }
}
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以按照以下步骤来为 Nginx 生成和使用自签名证书: 1. 生成私钥:打开终端并执行以下命令生成一个私钥文件: ``` openssl genrsa -out private.key 2048 ``` 2. 生成证书请求:使用私钥文件生成证书请求(CSR)文件: ``` openssl req -new -key private.key -out csr.pem ``` 在生成过程中,您需要提供与证书相关的信息,例如域名和组织等。 3. 自签名证书使用私钥和证书请求文件生成自签名证书: ``` openssl x509 -req -days 365 -in csr.pem -signkey private.key -out certificate.crt ``` 这将生成一个有效期为 365 天的自签名证书。 4. 配置 Nginx:打开 Nginx 配置文件(通常在 `/etc/nginx/nginx.conf` 或 `/etc/nginx/conf.d/default.conf`)并添加以下内容: ``` server { listen 443 ssl; server_name your_domain.com; ssl_certificate /path/to/certificate.crt; ssl_certificate_key /path/to/private.key; # 其他 Nginx 配置项... } ``` 将 `your_domain.com` 替换为您的域名,并将 `/path/to/certificate.crt` 和 `/path/to/private.key` 替换为您生成的证书和私钥的路径。 5. 重启 Nginx:保存并关闭文件后,使用以下命令重启 Nginx: ``` sudo service nginx restart ``` 现在,您的 Nginx 服务器应该使用自签名证书进行加密通信了。请注意,由于这是自签名证书,因此在访问该网站时会出现浏览器安全警告。要获得受信任的证书,您应该考虑使用受信任的证书颁发机构(CA)签署的证书
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值