最近把博客弄得差不多了,接下来的事情就是对博客进行安全加固以及完善各种小功能,今天就在服务器上安装SSL证书。什么是SSL证书呢?
SSL证书是数字证书的一种,类似于驾驶证、护照和营业执照的电子副本。因为配置在服务器上,也称为SSL服务器证书。
本站blueheart66.cn用了下面的配置在SSL Labs测试中可以获得A的最佳评级。
演示配置环境
- 宝塔Linux 面板 5.9免费版
- Web服务器环境 Nginx1.12
具体配置文件
首先,你要了解宝塔面板的建立的站点Nginx 环境下的路径:
Nginx1.12安装路径:/www/server/nginx
所有站点配置文件存放路径:/www/server/panel/vhost/nginx/
站点配置文件:/www/server/panel/vhost/nginx /你的域名. conf(本教程需要修改此文件)
生成 dhparam.pem
一般网站使用的SSL证书都是RSA证书,这种证书基本都是2048位的**,但是证书**交换**必须要比证书**更长才能安全,而默认的只有1024位,所以我们需要手动生成一个更强的**。所以配置之前,如果没有DH-key就需要做下面的步骤:
- 有screen则跳过,没则安装
yum -y install screen
- 生成4096位的DH-Key(证书**交换**)
screen -S DH
openssl dhparam -out dhparam.pem 4096
可能需要比较长的时间,具体根据你的VPS服务器内存而定!我这里默认是使用的4K,如果配置比较低,也可以换成 2K,即把后面的参数 4096 换成 2048。
- 如果在等待过程中,网路出现中断,可以执行下面命令重新连接安装窗口。
screen -r DH
熬过漫长的等待时间后,建议生成的dhparam.pem文件最好跟SSL证书放在一起方便管理。我放入的文件夹是:/www/server/panel/vhost/ssl/
配置如下
只包含了SSL的部分,未包含其他比较重要的配置,如缓存、跳转、防盗链和强制HTTPS等等。
server
{
listen 80;
listen 443 ssl http2;
#使用HTTP/2,需要Nginx1.9.7以上版本
ssl on;
server_name blueheart66.cn www.blueheart66.cn;
index index.php index.html index.htm default.php default.htm default.html;
root /www/wwwroot/halo/target/dist/halo;
#SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
#error_page 404/404.html;
add_header X-Frame-Options DENY;
#禁止被嵌入框架
add_header X-Content-Type-Options nosniff;
#防止在IE9、Chrome和Safari中的MIME类型混淆攻击
ssl_certificate /www/server/panel/vhost/ssl/1_www.blueheart66.cn_bundle.crt;
ssl_certificate_key /www/server/panel/vhost/ssl/2_www.blueheart66.cn.key;
#SSL证书文件位置
ssl_dhparam /www/server/panel/vhost/ssl/dhparam.pem;
#DH-Key交换**文件位置
#SSL优化配置
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#只允许TLS协议
ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
#加密套件,这里用了CloudFlares Internet facing SSL cipher configuration
ssl_prefer_server_ciphers on;
#由服务器协商最佳的加密算法
ssl_session_cache builtin:1000 shared:SSL:10m;
#Session Cache,将Session缓存到服务器,这可能会占用更多的服务器资源
ssl_session_tickets on;
#开启浏览器的Session Ticket缓存
ssl_session_timeout 10m;
#SSL session过期时间
add_header Strict-Transport-Security "max-age=6307200; includeSubdomains; preload";
#开启HSTS,并设置有效期为“6307200秒”(6个月),包括子域名(根据情况可删掉),预加载到浏览器缓存(根据情况可删掉)
#SSL-END
#ERROR-PAGE-START 错误页配置,可以注释、删除或修改
#error_page 404 /404.html;
#error_page 502 /502.html;
#ERROR-PAGE-END
#PHP-INFO-START PHP引用配置,可以注释或修改
#PROXY-START
location /
{
proxy_pass http://localhost:8090;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
#持久化连接相关配置
#proxy_connect_timeout 30s;
#proxy_read_timeout 86400s;
#proxy_send_timeout 30s;
#proxy_http_version 1.1;
#proxy_set_header Upgrade $http_upgrade;
#proxy_set_header Connection "upgrade";
#add_header X-Cache $upstream_cache_status;
#expires 12h;
}
#禁止访问的文件或目录
location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
{
return 404;
}
#一键申请SSL证书验证目录相关设置
location ~ \.well-known{
allow all;
}
access_log /www/wwwlogs/blueheart66.cn.log;
error_log /www/wwwlogs/blueheart66.cn.error.log;
}
配置完后请重启Nginx!
- CentOS 6.x:
service nginx restart
- CentOS 7.x:
systemctl restart nginx
写在最后
其实文件配置还是很简单的,最主要找到配置文件的位置,复制文中代码修改文件路径即可。