从Github签出 Let’s Encrypt 的源代码
git clone https://github.com/letsencrypt/letsencrypt
进入本地源代码目录
cd letsencrypt
Let’s Encrypt提供多种认证方式,因为之前在VPS上有了HTTP的网站,所以这里采用了 webroot 的方式,其他方式请参考 官方文档
如果是主域名的认证:
./letsencrypt-auto --debug certonly --webroot --email name@your_main_domain.com -d www.your_main_domain.com -d your_main_domain.com -w /var/www/your_main_domain.com
子域名的认证:
./letsencrypt-auto --debug certonly --webroot --email name@your_main_domain.com -d subdomain.your_main_domain.com -w /var/www/your_main_domain.com/subdomain
然后在弹出的蓝底白字提示框中一路点击”OK”
注意如下问题:
生成的证书放在 /etc/letsencrypt/live/[网站域名] 下
文件名 | 内容 |
---|---|
cert.pem | 服务端证书 |
chain.pem | 浏览器需要的所有证书但不包括服务端证书,比如根证书和中间证书 |
fullchain.pem | 包括了cert.pem和chain.pem的内容 |
privkey.pem | 证书的私钥 |
一般情况下 fullchain.pem 和 privkey.pem 就够用了
采用的 Nginx 做的Web服务器,所以这里贴下我的服务端配置
因为同一个VPS上放置了多个站点,所以Nginx采用vhost的方式,将主域名以及子域名的Nginx配置文件单独编写,并放置在 /etc/nginx/sites-available/ 下,如果哪个网站启用,则在/etc/nginx/sites-enabled/下创建 /etc/nginx/sites-available/ 对应目录的软链接。这一套原本是Ubuntu发行版里面Nginx的默认配置,个人觉得不错,所以照搬到Gentoo里使用。
Nginx的主配置文件 /etc/nginx/nginx.conf 需要加入如下配置:
http { ## # Virtual Host Configs ## include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; }
子域名vhost的配置,在 /etc/nginx/sites-available/ 下创建文件subdomian并填入如下内容
server { listen 443 ssl; server_name subdomain.your_main_domain.com; # http://www.acunetix.com/blog/articles/configure-web-server-disclose-identity/ server_tokens off; access_log /var/log/nginx/subdomain.your_main_domain.com.access_log; error_log /var/log/nginx/subdomain.your_main_domain.com.error_log; index index.html index.htm index.php; root /var/www/your_main_domain.com/subdomain; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5; ssl_session_cache builtin:1000 shared:SSL:10m; resolver 8.8.8.8 8.8.4.4 valid=300s; resolver_timeout 5s; ssl_prefer_server_ciphers on; ssl_certificate /etc/letsencrypt/live/subdomain.your_main_domain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/subdomain.your_main_domain.com/privkey.pem; ssl_session_timeout 5m; ssl_session_tickets on; ssl_stapling on; ssl_stapling_verify on; add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"; add_header X-Frame-Options deny; add_header X-Content-Type-Options nosniff; add_header Content-Security-Policy "default-src 'none'; script-src 'unsafe-inline' 'unsafe-eval' blob: https:; img-src data: https: http://ip.qgy18.com; style-src 'unsafe-inline' https:; child-src https:; connect-src 'self' https://translate.googleapis.com; frame-src https://disqus.com https://www.slideshare.net"; # https://www.troyhunt.com/shhh-dont-let-your-response-headers/ proxy_hide_header Vary; fastcgi_hide_header X-Powered-By; fastcgi_hide_header X-Runtime; fastcgi_hide_header X-Version; include php-fpm.conf; } server { server_name subdomain.your_main_domain.com; listen 80; server_tokens off; access_log /dev/null; location ^~ /.well-known/acme-challenge/ { alias /home/name/.well-known/; try_files $uri =404; } location / { rewrite ^/(.*)$ https://subdomain.your_main_domain.com/$1 permanent; } } }
php-fpm.conf(全路径 /etc/nginx/php-fpm.conf)的内容:
location ~ /.php$ { # With php5-fpm: #fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; #fastcgi_param SCRIPT_FILENAME /var/www/$domain$subdomain$fastcgi_script_name; include fastcgi_params; }
注意的问题
Let’s Encrypt证书的默认有效期只有 90 天,所以需要定时更新服务端的证书避免过期
一条命令更新所有服务端的证书
./letsencrypt-auto renew
添加为定时任务, 编辑这个文件
sudo vi /etc/cron.monthly/letsencrypt_renew
添加如下内容:
#!/bin/sh /path/to/letsencrypt/letsencrypt-auto --debug renew > /var/log/letsencrypt/renew.log 2>&1
授予 /etc/cron.monthly/letsencrypt_renew 可执行权限
sudo chmod a+x /etc/cron.monthly/letsencrypt_renew
如果想收回(撤销)颁发给服务端的证书,可以使用如下命令
./letsencrypt-auto revoke --cert-path /etc/letsencrypt/live/subdomain.your_main_domain.com/cert.pem
可以使用 Jerry Qu 推荐的两个在线HTTPS配置扫描服务来检查你的网站HTTPS配置的问题,并根据建议做相应的修复。
Qualys SSL Labs’s SSL Server TestHTTP Security Report
Let’s Encrypt官网
Let’s Encrypt,免费好用的 HTTPS 证书
LetsEncrypt SSL 证书签发(Nginx)
听说DNSpod也支持Let’s Encrypt了
免费SSL安全证书Let’s Encrypt安装使用教程(附Nginx/Apache配置)
免费SSL证书Let’s Encrypt安装使用教程:Apache和Nginx配置SSL
LET’S ENCRYPT免费SSL证书申请过程
Ghost Blog启用HTTPS使用LetsEncrypt SSL证书Previous
如何给安卓APP安装听诊器,检查数据问题