目录
对nginx添加安全隔离,即将我们使用的http请求转化为https请求,即在http协议上加一层SSL外壳来对http流量进行加密从而实现流量的安全传输,确保数据的安全
相关协议
SSL协议
SSL(Secure Sockets Layer,安全套接层)协议是一种网络安全协议,旨在在两个通信应用程序之间提供保密性和数据完整性。
定义与功能
SSL协议用于在互联网上建立加密的通信通道,确保数据的安全传输。它通过在客户端和服务器之间建立加密通道,利用加密算法和证书来验证双方的身份,从而确保数据在传输过程中的安全性和完整性。
SSL证书
SSL证书是一种数字证书,用于证明网站或应用程序的身份。它包含网站的公钥、证书颁发机构(CA)的信息、证书有效期等信息。当用户访问使用SSL证书的网站时,浏览器会自动检查证书的有效性和信任链,以确保用户与正确的网站进行通信。SSL证书的使用增强了用户对网站的信任度,并提高了网站的安全性。
SSL前景
尽管SSL协议在早期得到了广泛应用,但其存在一些安全漏洞和缺陷。因此,其继承者TLS(Transport Layer Security,传输层安全性)协议应运而生。TLS协议包含了许多安全增强功能,并最终被大多数应用所采用,替换了SSL。
TLS协议
TLS(Transport Layer Security,传输层安全性协议)是一种为网络通信提供安全及数据完整性保障的安全协议。
定义与功能
TLS协议旨在在两个通信应用程序之间提供保密性、数据完整性以及真实性。它通过使用多种加密技术,如对称加密、非对称加密和哈希函数等,来确保通信数据在传输过程中不被窃听、篡改或伪造。
TLS协议的特点
- 保密性:通过加密技术确保通信数据在传输过程中不被未授权的第三方读取。
- 完整性:使用消息摘要算法(如哈希函数)验证数据在传输过程中是否被篡改。
- 身份验证:通过数字证书等机制验证通信双方的身份,防止中间人攻击。
- 灵活性:支持多种加密算法和密钥交换方式,可根据需要选择最合适的配置。
应用场景
TLS协议广泛应用于各种需要保护网络通信安全的场景,包括但不限于:
- 网站加密通信:通过HTTPS协议保护网站和用户之间的通信安全。
- 电子邮件加密:通过SMTP或POP3/IMAP协议保护电子邮件的传输安全。
- 虚拟专用网络(VPN):加密用户与VPN服务器之间的通信,保护用户的网络通信安全。
- 客户端-服务器应用程序通信:如在线银行应用、电子商务应用等,确保用户与服务器之间的通信不被窃取或篡改。
- 机器对机器通信:在物联网(IoT)和其他机器对机器通信的场景中,保护通信安全。
相关模块
想要在nginx中使用SSL,需要下载nginx中的相关模块,即--with-http_ssl_module模块
使用nginx -V 验证nginx中是否安装此模块,如果没有可以参考一下链接,在nginx中安装新的模块,将--wiht-http_ssl_module模块进行添加
相关命令
ssl指令
选择是否开启HTTPS功能,两种写法
语法 | ssl on|off; |
---|---|
默认值 | ssl off; |
位置 | http块,server块 |
例:
写法一:更为常用
server {
listen 443 ssl;
server_name www.monkey.com;
}
写法二:了解即可
server {
listen 443;
ssl on;
server_name www.monkey.com;
}
ssl_certificate指令
为当前虚拟主机指定一个带有PEM格式证书的证书
语法 | ssl_certificate file; |
---|---|
默认值 | --- |
位置 | http块,server块 |
ssl_certificate_key指令
指定PEM server key 文件的路径
语法 | ssl_certificate_key file; |
---|---|
默认值 | --- |
位置 | http块,server块 |
ssl_session_cache指令
指定用来配置用于SSL会话的缓存
语法 | ssl_session_chche off | none | [builtin[:size]] [shared:name:size] |
---|---|
默认值 | --- |
位置 | http块,server块 |
参数解析
off:禁用会话缓存,客户端不可以重复使用会话
none:禁止使用会话缓存,客户端可以重复使用,但是并没有在缓存中存储会话参数
builtin:内置Openssl缓存,仅在一个工作进程中使用
shared:所有工作进程之间共享缓存,缓存的相关信息用name和size来指定
ssl_session_timeout指令
开启SSL会话功能后,设置客户端能够反复使用存储在缓存中的会话参数时间
默认时间为5mins
语法 | ssl_session_timeout time; |
---|---|
默认值 | ssl_server_timeout 5m; |
位置 | http块,server块 |
ssl_ciphers指令
支出允许的密码,密码指定为OpenSSL支持的格式
可以使用openssl ciphers查看openssl支持的格式
语法 | ssl_ciphers ciphers; |
---|---|
默认值 | ssl_ciphers HIGH:!aNULL:!MD5; |
位置 | http块,server块 |
ssl_prefer_server_ciphers指令
设置该指令是否服务器密码优先于客户端密码
语法 | ssl_prefer_server_ciphers on|off; |
---|---|
默认值 | ssl_prefer_server_ciphers off; |
位置 | http块,server块 |
生成证书文件
使用工具
使用openssl来进行
使用openssl version来判断是否安装此软件
安装命令
yum -y install openssl
生成文件
创建目录
创建目录放置证书文件
mkdir /root/cert
生成对应key
openssl genrsa -des3 -out server.key 2048
des3为加密算法 out为输出 1024为加密后生成的密码位数,越大越安全
生成csr文件
使用刚刚生成的key来进行csr文件的生成,需要用到第一次输入的密码
openssl req -new -key server.key -out server.csr
复制key文件
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
验证生成的文件
ls -l ./
开启SSL配置
将SSL协议与nginx融合在一起,对nginx传输的流量进行加密
server {
listen 443 ssl;
server_name localhost;
ssl_certificate /root/cert/server.crt;
ssl_certificate_key /root/cert/server.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
root /usr/share/nginx/html;
index index.html;
}
}
检测配置
使用nginx -t 检测配置是否有误
验证结果
出现此界面则说明配置已经成功,出现警告的原因是我们使用的证书未进行认证,不安全,因此会出现警告,可以点击高级设置进行继续访问
阿里云证书购买
阿里云官网
点击产品,搜索证书,即可进行域名的购买