sensai2.0

329
15

let's encrypt是一个免费的ssl证书工具,用于个人网站自己申请免费的https证书,网上配置方法很多,这边做一微小的总结,记录配置过程中可能出现的坑


1. centos6.x下的certbot的安装配置

certbot是let's encrypt官方的客户端,用于生成/配置/部署证书

sensai服务器用的是centos6.x(相比systemd个人比较熟悉chkconfig)

centos6.x下没有对应的yum包,不过可以直接通过链接下载并安装:

wget https://dl.eff.org/certbot-auto
chmod a+x ./certbot-auto
下完之后,先装系统依赖以避免出现问题

yum install -y epel-release
yum update
然后安装certbot相关依赖

./certbot-auto certonly

中间可能会报Python2.6 deprecated相关类型的错误,一般不用去管,不放心可以手动安装一下Python2.7

在生成证书之前需要在对应domain的根路径下添加.well-known的路径访问。

以nginx为例,需要添加:

location ~ /.well-known {
  allow all;
}

完成之后就可以生成证书:

sudo ./certbot-auto certonly --webroot -w /path/to/webroot1 -d domain.com -d www.domain.com -w /path/to/webroot2 -d test.clamis.net -n

​以本站根路径为例,配置如下:

sudo ./certbot-auto certonly --webroot -w /wwwroot -d powerpigger.com -n
成功后会在/etc/letsencrypt目录下生成相关文件


2. nginx配置

​nginx配置证书过程很方便,只需要把生成的私钥和证书文件放上去就可以了,唯一注意的是需要nginx对这两个文件有访问权限(chown为nginx用户)

以本站为例,以下配置是必须的:

ssl_certificate      /etc/letsencrypt/live/powerpigger.cc/fullchain.pem;
ssl_certificate_key  /etc/letsencrypt/live/powerpigger.cc/privkey.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets on;

除此之外,建议配置nginx的ssl_dhparam、ssl_ciphers以及ssl_protocols等配置项:

ssl_dhparam通过以下命令生成:

sudo mkdir -p /etc/openssl
sudo openssl dhparam -out /etc/openssl/dhparam.pem 2048

ssl_dhparam /etc/ssl/private/dhparam.pem;
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:
  AES256:AES:DES-CBC3:SHA:HIGH:
  !aNULL:!eNULL:!EXPORT:
  !DES:!RC4:!MD5:!PSK';
ssl_prefer_server_ciphers on;

最终可以把80端口强制跳转到443下:

server {
  listen  80;
  server_name powerpigger.cc;
  rewrite ^ https://$server_name$request_uri? permanent;
}
server {
  listen       443 ssl;
  server_name  powerpigger.cc;
  # 前面的其他配置
  # ......
}
重启nginx即成功配置https,可访问一下: https://powerpigger.cc


3. 定时更新

certbot生成的证书只有90天的有效期,所以一般网上的解决方案都是把定时更新​放到crontab里,这里需要注意的是更新之前需要先把nginx停下来,重新获取到证书后再start,否则可能会失败。

./certbot-auto renew --standalone --pre-hook "service nginx stop" --post-hook "service nginx start"

4. 有用的文档

其实官网上面的文档写的很详细,各个环境下的各个服务器都有详细的配置,还有自动配置到nginx的方法。到处乱搜有的时候可能会踩更多的坑....

https://certbot.eff.org/all-instructions/


5. 一点遗憾

本来打算把sensai直接加上绿锁的,然而静态资源在免费的七牛云上面,没有用到https。同时文章中各种http外链的图片,由于https访问http就会标红,所以只好作罢,或许可以把所有的数据请求变成https

回复

对话列表

×