2025年4月5日 星期六 乙巳(蛇)年 正月初六 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 服务器 > 网络服务

使用 Certbot 部署 Lets Encrypt 免费 SSL 证书实现 HTTPS

时间:12-14来源:作者:点击数:3

免费 SSL 证书

Let's Encrypt is a free, automated, and open Certificate Authority.

步骤

准备

  • 一台服务器
  • 一个域名
  • 一个可访问的网站

下载 Certbot

Let’s Encrypt 是属于介绍性质的,而真正使用到的工具是 Certbot (https://certbot.eff.org/),使用前需要去官网下载。

这里以nginxcentos 6,域名以 example.com 为例。

  • cd /use/local/bin
  • wget https://dl.eff.org/certbot-auto
  • chmod a+x certbot-auto

执行 Certbot

  • ./certbot-auto

这里需要 Python 2.7 以上版本,详细参考 Centos 6.4 python 2.6 升级到 2.7

如果安装出现:

  • reading manifest file 'src/cryptography.egg-info/SOURCES.txt'
  • reading manifest template 'MANIFEST.in'
  • no previously-included directories found matching 'docs/_build'
  • warning: no previously-included files matching '*' found under directory 'vectors'
  • writing manifest file 'src/cryptography.egg-info/SOURCES.txt'
  • running build_ext
  • generating cffi module 'build/temp.linux-x86_64-2.7/_padding.c'
  • creating build/temp.linux-x86_64-2.7
  • generating cffi module 'build/temp.linux-x86_64-2.7/_constant_time.c'
  • generating cffi module 'build/temp.linux-x86_64-2.7/_openssl.c'
  • building '_openssl' extension
  • creating build/temp.linux-x86_64-2.7/build
  • creating build/temp.linux-x86_64-2.7/build/temp.linux-x86_64-2.7
  • gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -I/usr/local/include/python2.7 -c build/temp.linux-x86_64-2.7/_openssl.c -o build/temp.linux-x86_64-2.7/build/temp.linux-x86_64-2.7/_openssl.o
  • build/temp.linux-x86_64-2.7/_openssl.c:1976: 警告:函数声明不是一个原型
  • gcc: 内部错误:已杀死 (程序 cc1)
  • 请提交一份完整的错误报告。
  • 具体步骤请参见 <http://bugzilla.redhat.com/bugzilla>。
  • error: command 'gcc' failed with exit status 1

先检查

  • dmesg | tail
  • [26925] 500 26925 26581 114 0 0 0 certbot-auto
  • [26949] 500 26949 26580 121 0 0 0 certbot-auto
  • [27015] 500 27015 26580 116 0 0 0 certbot-auto
  • [27016] 500 27016 60474 8155 0 0 0 pip
  • [27096] 500 27096 54072 5455 0 0 0 python2.7
  • [27099] 500 27099 25457 39 0 0 0 gcc
  • [27100] 500 27100 81347 51043 0 0 0 cc1
  • [27101] 0 27101 4015 451 0 0 0 sampler.py
  • Out of memory: Kill process 27100 (cc1) score 200 or sacrifice child
  • Killed process 27100, UID 500, (cc1) total-vm:325388kB, anon-rss:204112kB, file-rss:60kB

查看输出是否包含 Out of memory 字样,如果是的话,属于机器内存不够,可以 用swap交换分区「扩展」内存容量

正常情况下,Certbot 会自动下载安装一些必要软件,同意即可。

如果此时卡住了 Installing Python packages,设置 pip 为国内源即可。

  • vim ~/.pip/pip.conf
  • [global]
  • index-url = http://mirrors.aliyun.com/pypi/simple/
  • [install]
  • trusted-host=mirrors.aliyun.com

下载完毕之后,就可以进行证书签发了。

  • ./certbot-auto certonly --webroot -w /path/to/website/webroot -d example.com

这里会显示一些交互,都是傻瓜性质的。

如果签发失败,有可能是你的网站不能访问,需要你修复后继续。

签发完成之后:

  • IMPORTANT NOTES:
  • - Congratulations! Your certificate and chain have been saved at
  • /etc/letsencrypt/live/example.com/fullchain.pem. Your cert will
  • expire on 2017-02-27. To obtain a new or tweaked version of this
  • certificate in the future, simply run certbot-auto again. To
  • non-interactively renew *all* of your certificates, run
  • "certbot-auto renew"
  • - If you like Certbot, please consider supporting our work by:
  • Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
  • Donating to EFF: https://eff.org/donate-le

nginx 配置

  • ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
  • ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
  • ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;

定期续签

先进行续签测试

  • ./certbot-auto renew --dry-run

测试成功:

  • Congratulations, all renewals succeeded. The following certs have been renewed:
  • /etc/letsencrypt/live/example.com/fullchain.pem (success)
  • ** DRY RUN: simulating 'certbot renew' close to cert expiry
  • ** (The test certificates above have not been saved.)
  • IMPORTANT NOTES:
  • - Your account credentials have been saved in your Certbot
  • configuration directory at /etc/letsencrypt. You should make a
  • secure backup of this folder now. This configuration directory will
  • also contain certificates and private keys obtained by Certbot so
  • making regular backups of this folder is ideal.

在特定目录,先写续签脚本,保存为renew-cert.sh

  • #!/bin/bash
  • # 续签
  • /usr/local/bin/certbot-auto renew --quiet
  • # 重启 nginx
  • /usr/sbin/nginx -s reload

每月 1 日凌晨 3 点执行续签:

  • crontab -e
  • 00 03 1 * * ./特定目的/renew-cert.sh
  • service crond restart
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐