Http的裸奔特质已经被越来越多的人所了解,当前从Http转向Https已经是大势所趋。google和百度相继宣布支持Https, 并且承诺在搜索结果中,Https网站会获得更好的排名。本文将以nginx服务器为例,介绍快速从http转https网站的完整步骤。
第一步:获得Https证书
- 进入专业Https服务站certbot.eff.org,如下图所示,选择服务器类型和操作系统版本。看是否有满足您操作系统环境和服务要求的版本。本文以centos/nginx为例做说明。特别难能可贵的是:这个网站提供的https证书是免费的!连注册啥的都不需要,零门槛!
假设我们选择的是centos7+nginx(当然其他服务器类型apache/http也可以!)
- 安装certbot程序,这个程序用来给网站下载安装Https证书。
sudo yum install certbot
- 执行certbot certonly获取证书。一次可以为多个域名获取证书。其中/var/www/example和/var/www/thing/分别是网站根目录, example.com/www.examplec.com/thing.is/m.thing.is是域名。
- 已经开启Http服务的情况下, 执行下面的命令,需要保证网站根目录下的有.well-known/目录且可以访问。
certbot certonly --webroot -w /var/www/example -d example.com -d www.example.com -w /var/www/thing -d thing.is -d m.thing.is
注1:安装的过程根据提示输入自己的邮箱。
注2:如果提示.well-known不能访问,在nginx配置中加入:location ~ /.well-known { allow all;}
- 没有开启Http服务的情况下,执行下面的命令(推荐)。
certbot certonly --standalone -d example.com -d www.example.com
- 执行上面的命令之后,Http证书就成功安装了,一般位于:/etc/letsencrypt/目录,详见安装提示。
- 已经开启Http服务的情况下, 执行下面的命令,需要保证网站根目录下的有.well-known/目录且可以访问。
- Https证书一般90天过期,所以需要设置自动更新证书。
- 更新证书的命令
certbot renew --dry-run
- 一般在crontab中设置定期执行renew程序,实现Https证书自动更新。下面的命令是每天6:30/18:30点更新。
30 6,18 * * * certbot renew --quiet
- 更新证书的命令
- 到这里,Https证书就安装成功了。注意:上面的步骤除了centos+nginx,也支持其他系统。
第二步:配置nginx服务器支持Https
- 在服务器nginx配置中加入下面的代码即可。注意:1)Https监听的端口是443;2)初一将域名改成你自己的。
server { listen 443 ssl; server_name vimsky.com alias www.vimsky.com; root /usr/share/nginx/html/vimsky; access_log /etc/nginx/logs/www.vimsky.com-access.log; error_log /etc/nginx/logs/www.vimsky.com-error.log; # Nginx Https关键配置,开始位置 #ssl (其实实际是tls) ssl on; ssl_prefer_server_ciphers on; # 支持的加密协议 ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # 支持的加密套件 ssl_ciphers HIGH:!RC4:!3DES:!aDSS:!aNULL:!kPSK:!kSRP:!MD5:@STRENGTH:+SHA1:+kRSA; # 定义session缓存大小 ssl_session_cache shared:TLSSL:16m; # 定义session过期时间 ssl_session_timeout 20m; # https证书公钥 ssl_certificate /etc/letsencrypt/live/vimsky.com/fullchain.pem; # https证书私钥 要注意保存! ssl_certificate_key /etc/letsencrypt/live/vimsky.com/privkey.pem; # nginx默认会使用Diffiel-Hellman交换密钥是1024位的,相对不安全,所以需要替换使用更安全的。 #使用 openssl dhparam -out dh4096.pem 4096 可以生成,然后我将其与网站证书的密钥放到了一起, 暂时不启用这个 #ssl_dhparam /etc/letsencrypt/live/vimsky.com/dh4096.pem; # 禁止被外站frame嵌入引用 add_header X-Frame-Options SAMEORIGIN; # 为响应头添加要求浏览器使用https重定向的 header add_header Strict-Transport-Security max-age=16000000; # Nginx Https关键配置,结束位置 location / { # 后面的配置无关Https省略了.....
- 注意上面秘钥的生成,是使用命令:
openssl dhparam -out dh4096.pem 4096
- 配置好之后,重启nginx服务器:
service nginx restart
第三步:这是可选步骤,将Http重定向到Https,网站同时支持Http和Https是没有问题的,全部转到Https更好。
配置如下:
server{
listen 80;
server_name vimsky.com alias www.vimsky.com;
return 301 https://vimsky.com$request_uri;
}
到这里,网站从Http转到Https就全部完成了。
延伸阅读: 你的https网站真的安全吗?