Ubuntu 16.04 上获取Let’s Encrypt免费证书
云服务商:阿里云
服务器:针对Nginx服务器;
假设域名:example.com www.example.com
假设IP:137.137.137.137
域名指向IP地址
这时,ping这个域名就会显示IP地址,说明指向成功。
安装Nginx服务器
sudo apt-get install nginx
sudo service nginx start
这里,浏览器里打开example.com
,可以显示nginx
欢迎界面,说明安装成功;
安装letsencrypt
sudo apt-get install letsencrypt
签发证书
很简单,直接运行letsencrypt
命令即可
sudo letsencrypt certonly --webroot -w /var/www/html -d example.com -d www.example.com
第一次运行时会问你一些你的信息,以后就不会再询问了。
解释一下,certonly
是它的子命令,表示只颁发证书。--webroot
是它的插件,用于自动验证域名。-w是指定网站的目录,-d
是指定目录对应的域名。一个-w
后可以跟着多个-d
就对应多个域名。可以用多个-w
设置多个目录对应不同的域名。这些域名都在一个证书里。
需要注意的是,域名下的\.well-know\acme-challenge\
目录下的文件必须要可以访问。这个是Let’s Encrypt
用于验证域名所有权的。它会在上面-w参数设置的目录下建立临时文件,然后通过HTTP访问,比如上面的设置就会新建诸如/var/www/html/.well-known/acme-chanllenge/xxxxxxx
(xxxxxxx是随机字符),然后通过http://example.com/.well-known/acme-chanllenge/xxxxxxx
来验证。如果你的网站是纯HTTPS的,你可以用把这个地址重定向到https://example.com/.well-known/acme-chanllenge/xxxxxxx
,可以成功通过验证。
看到Congratulations!就代表成功了,下面我们就可以配置Nginx了。
##配置HTTP服务器
证书所在的地方是/etc/letsencrypt/
下,archive
里面是所有证书的存档,`keys 里面是所有证书,不过我们不用管,我们需要的证书在live下面,对应网站域名的目录下面就是了。一共有四个文件。
privkey.pem 这是私匙,对应Nginx的ssl_certificate_key选项,或者Apache2的SSLCertificateKeyFile选项。
cert.pem 服务器证书,这个只有Apache2低于2.4.8版本需要,对应SSLCertificateFile选项。
chain.pem 除服务器证书之外的所有证书,对于1.3.7版以上的Nginx对应ssl_trusted_certificate选项,对于低于2.4.8的Apache2对应SSLCertificateChainFile选项。
fullchain.pem 包括上面的服务器证书和其他证书,Nginx对应ssl_certificate选项,2.4.8版以上的Apache2对应SSLCertificateFile。
所以对于我用的Nginx来说,只需要privkey.pem和fullchain.pem这两个就够了。Apache2的话参考设置HTTPS的文章,对应设置上面提到的文件和选项就行了。
在Nginx的server下设置如下响应的ssl选项就行了,如:/etc/nginx/sites-enabled/example.com
##
# You should look at the following URL's in order to grasp a solid understanding
# of Nginx configuration files in order to fully unleash the power of Nginx.
# http://wiki.nginx.org/Pitfalls
# http://wiki.nginx.org/QuickStart
# http://wiki.nginx.org/Configuration
#
# Generally, you will want to move this file somewhere, and start with a clean
# file but keep this around for reference. Or just disable in sites-enabled.
#
# Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples.
##
server {
listen 443 ssl;
server_name example.com www.example.com;
root /var/www/html;
index index.html index.nginx-debian.html;
ssl on;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
location / {
try_files $uri $uri/ =404;
}
}
server {
listen 80;
server_name example.com www.example.com;
root /var/www/html;
index index.html index.nginx-debian.html;
location / {
try_files $uri $uri/ =404;
}
rewrite ^(.*)$ https://example.com$1 permanent;
}
设置好了别忘了重启Nginx。
续期
#!/bin/sh
letsencrypt renew
systemctl restart nginx
如果有proxy_set_header,需要先注释掉才能成功
server {
listen 80;
server_name example.com www.example.com;
root /var/www/html;
index index.html index.nginx-debian.html;
location / {
#proxy_set_header X-Real-IP $remote_addr;
#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#proxy_set_header Host $http_host;
#proxy_set_header X-NginX-Proxy true;
#proxy_pass http://127.0.0.1:8080/;
#proxy_redirect off;
#try_files $uri $uri/ =404;
}
#rewrite ^(.*)$ https://example.com$1 permanent;
}
https://tsukkomi.org/post/get-the-lets-encrypt-certificate-on-ubuntu