Let’s Encrypt网站启用https以及nginx配置安全优化

最近Let’s Encrypt公测了,所有网站都可以利用 Let’s Encrypt(certbot) 给自己的发放https证书。今天本博客也正式启用https.这里记录一下Let’s Encrypt的使用和注意事项,以及nginx相关配置和优化。

个人原创,版权所有,转载请注明原文出处,并保留原文链接:
https://www.embbnux.com/2015/12/29/letsencrypt_with_nginx_config_for_wordpress/

一、利用Let’s Encrypt获取https证书

其实之前本站就获得了Let’s Encrypt内测资格,只是在使用Let’s Encrypt时发现了dns错误,因为生成证书时Let’s Encrypt,需要访问该ip指向的主机进行验证,但是发现我的域名在国外解析有问题,每次认证都会发现 urn:acme:error:connection, 提示Error: The server could not connect to the client。后来发现Let’s Encrypt使用的是谷歌的8.8.8.8解析,测试 nslookup www.embbnux.com 8.8.8.8 发现有问题,于是把域名解析移到dnspod, 一开始也不行,后来执行了nslookup www.embbnux.com 8.8.8.8,发现就好了8.8.8.8收录了我的域名解析。

使用Let’s Encrypt:

首先要把 nginx 关掉,因为 Let’s Encrypt 客户端运行时会占用80端口用来验证域名所有权。
然后记得把服务器 443 端口打开:
服务器的安全组的端口把 443 端口打开
如果有用 ufw 记得打开 : sudo ufw allow 443

git clone https://github.com/certbot/certbot.git
cd certbot
./certbot-auto certonly -d embbnux.com -d www.embbnux.com

最好同时申请 embbnux.com 和 www.embbnux.com 这样两个域名,会自动使用同一个证书进行认证,一切没问题后会在 /etc/letsencrypt/live/www.embbnux.com 下生成证书

如果发现 certbot-auto 命令执行很慢,停在安装 python 包不动,可以先设置下 pip 的源再重新执行:
新建或编辑 ~/.pip/pip.conf :

[global]
index-url = http://mirrors.aliyun.com/pypi/simple/

[install]
trusted-host=mirrors.aliyun.com

二、配置nginx

nginx配置主要有打开443端口,配置ssl证书,以及重定向原来的http到https

server {
  listen 80;
  server_name www.embbnux.com;
  rewrite ^(.*)$ https://$host$1 permanent;
}

server {
  server_name embbnux.com;
  return 301 https://www.embbnux.com$request_uri;
}

server{
  listen 443 ssl;
  ssl_certificate /etc/letsencrypt/live/www.embbnux.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/www.embbnux.com/privkey.pem;
  server_name www.embbnux.com;
}

如果使用的是wordpress还需要到配置常规里面把wordpress地址和站点地址改为https://www.embbnux.com

然后重启nginx:

sudo service nginx restart

然后打开浏览器访问www.embbnux.com会发现自动重定向到https

三、ssl配置优化

可以使用https后可以到www.ssllabs.com评测一下网站

https://www.ssllabs.com/ssltest/analyze.html?d=embbnux.com

测试完后发现被评为C,得再优化一下,参考这里 :

首先关掉ssl v2和ssl v3支持,这两个有安全问题:

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

配置dhparams长度

cd /opt
mkdir dhparam
cd dhparam
mkdir keys
cd keys
openssl dhparam -out dhparams.pem 2048
cd ../
sudo chmod 700 keys

新的nginx配置:

server{
  listen 443 ssl;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';

  ssl_prefer_server_ciphers on;
  ssl_session_cache shared:SSL:10m;
  ssl_dhparam /opt/dhparam/keys/dhparams.pem;
  ssl_certificate /etc/letsencrypt/live/www.embbnux.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/www.embbnux.com/privkey.pem;
  server_name www.embbnux.com;
}

这样再评测就发现已经是A等级了。

《Let’s Encrypt网站启用https以及nginx配置安全优化》有6个想法

  1. 下次再试试,前几天我用腾讯的vps获取证书也出现无法连接进来的问题,后来域名切到国外vps轻松拿到证书又再切回来用的,dns服务商也是用的dnspod

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Time limit is exhausted. Please reload the CAPTCHA.