1 什么是 https

HTTPS (全称:Hyper Text Transfer Protocol over SecureSocket Layer),是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性 [1] 。HTTPS 在HTTP 的基础下加入SSL,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。 HTTPS 存在不同于 HTTP 的默认端口及一个加密/身份验证层(在 HTTP与 TCP 之间)。这个系统提供了身份验证与加密通讯方法。它被广泛用于万维网上安全敏感的通讯

2 https 的特点

  1. 内容加密:采用混合加密技术,中间者无法直接查看明文内容
  2. 验证身份:通过证书认证客户端访问的是自己的服务器
  3. 保护数据完整性:防止传输的内容被中间人冒充或者篡改

混合加密:结合非对称加密和对称加密技术。客户端使用对称加密生成密钥对传输数据进行加密,然后使用非对称加密的公钥再对秘钥进行加密,所以网络上传输的数据是被秘钥加密的密文和用公钥加密后的秘密秘钥,因此即使被黑客截取,由于没有私钥,无法获取到加密明文的秘钥,便无法获取到明文数据。
数字摘要:通过单向hash函数对原文进行哈希,将需加密的明文“摘要”成一串固定长度(如128bit)的密文,不同的明文摘要成的密文其结果总是不相同,同样的明文其摘要必定一致,并且即使知道了摘要也不能反推出明文。
数字签名技术:数字签名建立在公钥加密体制基础上,是公钥加密技术的另一类应用。它把公钥加密技术和数字摘要结合起来,形成了实用的数字签名技术

想了解http和https的区别, 可以查看 HTTP和HTTPS协议,看一篇就够了

3 nginx 实现 https

那么nginx 如何实现https

3.1 查看nginx 是否支持 https

nginx -V

在这里插入图片描述
得到如下结果,发现当前的nginx并不支持 https

3.2 安装 ssl 模块

进入 nginx 安装文件的根 目录
在这里插入图片描述
执行命令:

./configure --with-http_ssl_module

得到如下结果:
在这里插入图片描述
紧接着执行

make

在这里插入图片描述
查看当前目录 得到如下结果:
在这里插入图片描述
将objs 文件夹下的nginx 替换到 nginx 下的sbin 文件夹下
执行命令:

./nginx -V 

出现如下情况:
在这里插入图片描述
说明你的nginx 已经支持ssl 的相关功能了。

3.3 配置 ssl 相关的配置

server { 
	listen 443 ssl; 
	server_name localhost; 
	ssl_certificate server.cert; 
	ssl_certificate_key server.key; 
	ssl_session_cache shared:SSL:1m; 
	ssl_session_timeout 5m; 
	ssl_ciphers HIGH:!aNULL:!MD5; 
	ssl_prefer_server_ciphers on; 
	location / { 
		root html; index index.html index.htm; 
	}

server.cert, server.key这两个文件是ssl 相关的证书文件,可以在阿里云或腾讯云申请免费的证书。

4 Nginx的SSL相关指令

4.1 ssl

该指令用来在指定的服务器开启HTTPS,可以使用 listen 443 ssl,后面这种方式更通用些

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐