首次申请
下载安装 CertBot
# 下载 CertBot 脚本到当前目录,假设当前文件夹为 ~ 目录
wget https://dl.eff.org/certbot-auto
# 为 CertBot 脚本增加执行权限,# a 为 all 简写,x 为 execute 简写,a+x 表示所有用户及群组的可执行权限
chmod a+x ./certbot-auto
配置 pip 国内源
注:若之前已配置,请跳过此步骤;此步骤的目的是加速 CertBot 下载 python 模块的速度
# 新建 .pip 文件夹并进入
mkdir .pip && cd .pip
# 创建 pip.conf 文件
vi pip.conf
# 在 pip.conf 文件中输入以下内容
[global]
index-url=http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
# 保存退出
运行脚本,安装依赖
./certbot-auto --help
配置 nginx
目的:获取域名证书过程中, Let's Encrypt 会对域名发起访问,以确认申请者对域名的所有权;故需要配置 nginx,以便能够对 Let's Encrypt 的访问返回正确的响应;
# 创建文件夹,用于 Let's Encrypt 访问时返回响应内容
mkdir /home/letsencrypt
# 打开 nginx 配置文件进行编辑,此处假设 nginx 的配置文件在以下路径:/usr/local/nginx/conf/nginx.conf,如不是,则相应修改路径
vi /usr/local/nginx/conf/nginx.conf
// 在 nginx 配置文件中,找到 http 下监听 80 端口的 server
http {
//...(略)...
server {
listen 80;
// 添加如下内容,此处假设申请域名为 www.helloworld.com,请修改为实际申请的域名
server_name www.helloworld.com;
location ^~ /.well-known/acme-challenge/ {
defaulf_type "text/plain";
root /home/letsencrypt/;
}
// ......以下略......
重启 nginx
# 此处假设 nginx 可执行文件在路径 /usr/local/nginx/sbin 下面,如不是则相应修改路径
# 先使用 -t 参数测试配置文件格式是否正确
/usr/local/nginx/sbin/nginx -t
# 若正确,屏幕上将显示以下字样
> nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
# 重启 Nginx
/usr/local/nginx/sbin/nginx -s reload
运行脚本,申请证书
在申请证书前,记得先将域名的 DNS 解析指向当前的服务器 IP,这样 letsencrypt 机构在向域名发起连接请求的时候,才能路由到当前设置的机器
# 此处为域名 www.helloworld.com 申请一张证书,其中的 youremail.com 请替换为你自己的邮箱地址
./certbot-auto certonly --email youremail.com --webroot -w /home/letsencrypt -d www.helloworld.com
# 如果要为多个子域名(如 api/test/www) 申请一张证书,则相应修改命令如下
./certbot-auto certonly --email youremail.com --webroot -w /home/letsencrypt -d api.helloworld.com -d test.helloworld.com -d www.helloworld.com
申请成功后,界面下会有如下的成功提示:
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/helloworld.com/fullchain.pem. Your cert
will expire on 2019-08-26. To obtain a new version of the
certificate in the future, simply run Let's Encrypt again......
配置 nginx,启用证书
// 在 nginx 配置文件中,找到 http 下监听 443 端口的 server
http {
//...(略)...
server {
listen 443 ssl;
// 修改 server_name、ssl_certificate、ssl_certificate_key 三个字段的值
// 此处假设申请域名为 www.helloworld.com,请修改为实际申请的域名
server_name www.helloworld.com;
ssl_certificate /etc/letsencrypt/live/www.helloworld.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.helloworld.com/privkey.pem;
// ......以下略......
当用户访问非加密的 80 端口时,如果需要让服务器自动跳转到 443 端口使用证书的 https 访问,则可以在 http 下 80 端口的 server 中增加如下内容:
// 在 nginx 配置文件中,找到 http 下监听 80 端口的 server
http {
//...(略)...
server {
listen 80;
server_name www.helloworld.com;
// 添加如下内容,实现自动跳转
return 301 https://$server_name$request_uri
// ......以下略......
重启 Nginx,让配置生效
# 此处假设 nginx 可执行文件在路径 /usr/local/nginx/sbin 下面,如不是则相应修改路径
/usr/local/nginx/sbin/nginx -s reload
测试自动更新
# 使用 --dry-run 选项表示测试,非真正执行更新
./certbot-auto renew --dry-run
若显示如下字样,则表示自动更新功能测试成功
Congratulations, all renewals succeeded. The following certs have been renewed:
/etc/letsencrypt/live/www.helloworld.com/fullchain.pem (success)
** DRY RUN: simulating 'certbot renew' close to cert expiry
** (The test certificates above have not been saved.)
到期更新
由于 Let's Encrypt 颁发的证书只有 90 天有效期,因此需要定期进行证书更新
# 手动更新
./certbot-auto renew -v
网友评论