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欢迎界面,说明安装成功;
编辑nginx
$ vi /etc/nginx/sites-available/default
安装letsencrypt
sudo apt-get install letsencrypt #安装不了可以使用下面的方式
git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
./certbot-auto --help all
./certbot-auto certonly --standalone --email admin@laozuo.org -d laozuo.org -d www.laozuo.org
签发证书
很简单,直接运行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
server {
listen 443 ssl;
server_name api.imibi.cn;
client_max_body_size 4G;
client_header_timeout 5000;
client_body_timeout 5000;
root /var/www/html;
index index.html index.nginx-debian.html;
ssl on;
ssl_certificate /etc/letsencrypt/live/api.imibi.cn/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/api.imibi.cn/privkey.pem;
location / {
try_files $uri $uri/ =404;
proxy_pass http://127.0.0.1:5000; #转发到服务器
}
}
server {
listen 80;
server_name api.imibi.cn;
client_max_body_size 4G;
client_header_timeout 5000;
client_body_timeout 5000;
root /var/www/html;
index index.html index.nginx-debian.html;
location / {
try_files $uri $uri/ =404;
proxy_pass http://127.0.0.1:5000; #转发到服务器
}
rewrite ^(.*)$ https://example.com$1 permanent;
}
设置好了别忘了重启Nginx。
续期
#!/bin/sh
letsencrypt renew
systemctl restart nginx
如果有proxy_set_header,需要先注释掉才能成功
server {
listen 80;
server_name kangear.com www.kangear.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://kangear.com$1 permanent;
}