关于web服务器的安全是比较大的一个话题,里面所涉及的内容很多,Nginx反向代理是安全隔离来提升web服务器的安全,通过代理分开了客户端到应用程序服务器端的连接,实现了安全措施。在反向代理之前设置防火墙,仅留一个入口供代理服务器访问。
HTTPS是一种通过计算机网络进行安全通信的传输协议。它经由HTTP进行通信,利用SSL/TLS建立全通信,加密数据包,确保数据的安全性。
上述这两个是为网络通信提供安全及数据完整性的一种安全协议,TLS和SSL在传输层和应用层对网络连接进行加密。
总结来说为什么要使用https:
http协议是明文传输数据,存在安全问题,而https是加密传输,相当于http+ssl,并且可以防止流量劫持。
前置安装
yum install openssl-devel # CentOS/RHEL
如果是使用yum安装的话,默认是有--with-http_ssl_module
模块的。
如果是通过源码安装的话
ssl:该指令用来在指定的服务器开启HTTPS
语法 | ssl_certificate file; |
默认值 | |
位置 | http、server |
server{
listen 443 ssl;
}
为当前这个虚拟主机指定一个带有PEM格式证书的证书。
语法 | ssl_certificate file; |
默认值 | |
位置 | http、server |
该指令用来指定PEM secret key文件的路径
语法 | ssl_ceritificate_key file; |
默认值 | |
位置 | http、server |
语法 | ssl_sesion_cache off|none|[builtin[:size]] [shared:name:size] |
默认值 | ssl_session_cache none; |
位置 | http、server |
开启SSL会话功能后,设置客户端能够反复使用储存在缓存中的会话参数时间。
语法 | ssl_session_timeout time; |
默认值 | ssl_session_timeout 5m; |
位置 | http、server |
指出允许的密码,密码指定为OpenSSL支持的格式
语法 | ssl_ciphers ciphers; |
默认值 | ssl_ciphers HIGH:!aNULL:!MD5; |
位置 | http、server |
可以使用openssl ciphers
查看openssl支持的格式。
该指令指定是否服务器密码优先客户端密码
语法 | ssl_perfer_server_ciphers on|off; |
默认值 | ssl_perfer_server_ciphers off; |
位置 | http、server |
先要确认当前系统是否有安装openssl
openssl version
安装下面的命令进行生成
mkdir /root/cert # 创建目录并切换到该目录
cd /root/cert
openssl genrsa -des3 -out server.key 1024 # 生成带有密码保护的 RSA 密钥
openssl req -new -key server.key -out server.csr # 生成证书签名请求(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 # 自签名证书
生成带有密码保护的 RSA 密钥
openssl genrsa -des3 -out server.key 1024
这将生成一个加密的 RSA 私钥文件 server.key
,其中包含一个 1024 位的密钥。您将被要求输入一个密码来保护私钥文件,可以输入test
生成证书签名请求(CSR)
openssl req -new -key server.key -out server.csr
这将使用私钥文件生成一个证书签名请求文件 server.csr
。在生成过程中,您将被要求提供一些与证书相关的信息,例如组织名称、域名等
备份私钥文件并移除密码保护
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key
这将复制一份原始的私钥文件 server.key
,并将其备份为 server.key.org
。然后,使用 openssl rsa
命令从备份文件中删除密码保护,并将结果保存回 server.key
文件中。需要输入密钥test
自签名证书
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
这将使用私钥文件 server.key
和证书签名请求文件 server.csr
来生成一个自签名的 X.509 证书文件 server.crt
。该证书的有效期将为 365 天。
完成上述步骤后,您将在 /root/cert
目录下获得以下文件
server.key
: 不带密码保护的私钥文件server.crt
: 自签名的 SSL 证书文件server {
listen 443 ssl;
server_name localhost;
ssl_certificate /root/cert/server.cert; # 使用了绝对路径指定证书
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 html;
index index.html index.htm;
}
}