HTTPS
在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性 。HTTPS 在HTTP 的基础下加入SSL 层,HTTPS 的安全基础是 SSL,加密的详细内容依赖SSL。
HTTPS 原理
① 客户端将它所支持的算法列表和一个用作产生密钥的随机数发送给服务器 ;
② 服务器从算法列表中选择一种加密算法,并将它和一份包含服务器公用密钥的证书发送给客户端;该证书还包含了用于认证目的的服务器标识,服务器同时还提供了一个用作产生密钥的随机数;
③ 客户端对服务器的证书进行验证,并抽取服务器的公用密钥;然后,再产生一个称作 pre_master_secret 的随机密码串,并使用服务器的公用密钥对其进行加密,并将加密后的信息发送给服务器 ;
④ 客户端与服务器端根据 pre_master_secret 以及客户端与服务器的随机数值独立计算出加密和 MAC密钥 ;
⑤ 客户端将所有握手消息的 MAC 值发送给服务器 ;
⑥ 服务器将所有握手消息的 MAC 值发送给客户端 。
安装openssl组件
#安装openssl组件
yum install openssl
验证nginx 是否安装 http_ssl_module 模块
生成证书和私钥
#生成key
openssl genrsa -out openssl.key 1024
#生成CA crt(用于签署csr)
openssl req -new -x509 -key openssl.key -out ca.crt -days 3650
#生成csr(生成的csr文件交给CA签名后形成服务端证书)
openssl req -new -key openssl.key -out server.csr
#生成crt(CSR文件必须有CA的签名才可形成服务器端证书)
openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey openssl.key -CAcreateserial -out server.crt
#参数解释
-CA选项指明用于被签名的csr证书
-CAkey选项指明用于签名的密钥
-CAserial指明序列号文件
-CAcreateserial指明文件不存在时自动生成。#合并证书(openssl.key和ssl证书crt)
cat openssl.key server.crt > server.pem
Nginx 配置
[root@ZABBIX-Server conf.d]# egrep -v "*#|^$" zabbix.conf
server {
listen 6989;
listen 443 ssl;
server_name 192.168.99.50;
fastcgi_buffers 8 128k;
fastcgi_buffer_size 128k;
location / {
root /usr/share/nginx/html;
index index.html index.htm index.php;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name;
include fastcgi_params;
}
location ~ ^/(php_status|ping)$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name;
include fastcgi_params;
}
ssl_certificate /etc/ssl/server.pem;
ssl_certificate_key /etc/ssl/server.pem;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
if ($server_port = 6989){
rewrite ^(.*)$ https://$host$1 permanent;
}
}
#验证配置文件
nginx -t
#重启nginx服务
systemctl restart nginx
访问 http 链接重定向至 https
if ($server_port = 6989){
rewrite ^(.*)$ https://$host$1 permanent;
}
Https 访问ZABBIX
https://192.168.99.50/zabbix/