贼有用的免费申请HTTPS证书教程
这篇文章介绍一种免费申请CA证书的方式,而且是通配符域名哦。首先介绍一下证书颁发机构的背景。
Let's Encrypt
Let's Encrypt是一个于2015年三季度推出的数字证书认证机构,旨在以自动化流程消除手动创建和安装证书的复杂流程,并推广使万维网服务器的加密连接无所不在,为安全网站提供免费的SSL/TLS证书。Let's Encrypt由互联网安全研究小组(缩写ISRG)提供服务。主要赞助商包括电子前哨基金会、Mozilla基金会、Akamai以及思科。2015年4月9日,ISRG与Linux基金会宣布合作。用以实现新的数字证书认证机构的协议被称为自动证书管理环境(ACME)。GitHub上有这一规范的草案,且提案的一个版本已作为一个Internet草案发布。
Let's Encrypt宣称这一过程将十分简单、自动化并且免费。
-
2015年8月7日,该服务更新其推出计划,预计将在2015年9月7日发布首个证书,随后向列入白名单的域名发行少量证书并逐渐扩大发行量。
-
2015年12月3日,服务进入公测阶段,正式面向公众。
-
2016年3月8日,ISRG宣布已经签发了第一百万张证书。
-
2016年4月12日,该项目正式离开Beta阶段。
-
2017年6月28日,ISRG宣布,他们已经签发了一亿张证书。
技术
2015年6月,Let's Encrypt得到了一个存储在硬件安全模块中的离线的RSA根证书。这个由IdenTrust证书签发机构交叉签名的根证书,被用于签署两个证书。其中一个就是用于签发请求的证书,另一个则是保存在本地的证书,这个证书用于在上一个证书出问题时作备份证书之用。因为IdenTrust的CA根证书目前已被预置于主流浏览器中,所以Let's Encrypt签发的证书可以从项目开始时就被识别并接受,甚至在用户的浏览器中没有信任ISRG的根证书时也没问题。为了解决对Windows XP的兼容性,目前Let's Encrypt已经获取了另外两个根证书,原来的证书作为备用。
Let's Encrypt的开发者们本计划在2015年年末推出签发ECDSA根证书的服务,但该计划已经经历三次推迟,目前定于2018年3月前完成。
以上内容来自维基百科
证书申请
官网有整个教程,点击跳转。首先选择证书环境,不同选择的区别仅仅是证书编码和格式,一般可以互转,我们以Centos7
上配置Nginx
为例。
安装
Certbot的包装在EPEL(Enterprise Linux的额外软件包)中。要使用Certbot,必须首先启用EPEL存储库。在RHEL或Oracle Linux上,还必须启用可选通道。
如果在EC2上使用RHEL,则可以运行以下命令来启用可选通道:
$ yum -y install yum-utils $ yum-config-manager --enable rhui-REGION-rhel-server-extras rhui-REGION-rhel-server-optional
如果做完了这些,可以通过以下命令安装:
$ sudo yum install python2-certbot-nginx
Certbot的DNS插件也可用于你的系统,该插件可用于从Let's Encrypt的ACMEv2服务器中自动获取通配符证书。要使用这些插件,必须为想要获得Certbot插件提供的DNS提供商的证书的域配置DNS。这些插件的列表和更多关于使用它们的信息可以点击这里找到。要安装其中一个插件,请运行上面的安装命令,但是要将python2-certbot-nginx替换为要安装的DNS插件的名称。
开始申请
Certbot有一个Nginx插件,它在许多平台上都受支持,并且安装了证书。
运行这个命令可以自动生成证书和Nginx
的证书配置文件:
$ sudo certbot --nginx
如果希望手动配置Nginx,只需要生成证书,使用如下命令:
$ sudo certbot --nginx certonly
如果想使用Let's Encrypt的新ACMEv2服务器获得通配符证书,则还需要使用Certbot的一个DNS插件。为此,请确保使用上述说明安装了DNS提供商的插件,然后运行如下所示的命令:
$ sudo certbot -a dns-plugin -i nginx -d "*.example.com" -d example.com --server https://acme-v02.api.letsencrypt.org/directory
需要用你想使用的DNS插件的名称替换dns-plugin。可能还需要提供其他标签,例如上面链接的DNS插件文档中所述的API凭据路径。配上一个我申请的命令:
$ certbot certonly -d "*.yangqiang.im" --manual --preferred-challenges dns-01 --server https://acme-v02.api.letsencrypt.org/directory
命令执行过程中会出现以下内容,其中部分需要填写邮箱等信息:
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): yangqiang@yangqiang.im
-------------------------------------------------------------------------------
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
-------------------------------------------------------------------------------
(A)gree/(C)ancel: A
-------------------------------------------------------------------------------
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about EFF and
our work to encrypt the web, protect its users and defend digital rights.
-------------------------------------------------------------------------------
(Y)es/(N)o: Y
Obtaining a new certificate
Performing the following challenges:
dns-01 challenge for yangqiang.im
-------------------------------------------------------------------------------
NOTE: The IP of this machine will be publicly logged as having requested this
certificate. If you're running certbot in manual mode on a machine that is not
your server, please ensure you're okay with that.
Are you OK with your IP being logged?
-------------------------------------------------------------------------------
(Y)es/(N)o: Y
在过程中注意以下信息,这些信息需要你按照下面的信息配置TXT的域名解析,证明这个域名是你有权限操作的:
Please deploy a DNS TXT record under the name
_acme-challenge.yangqiang.im with the following value:
eHihXZhJUid9mLFTdU17sk223Klksdkl223k23
Before continuing, verify the record is deployed.
-------------------------------------------------------------------------------
Press Enter to Continue
如果成功,用_acme-challenge.yangqiang.im
访问,应该显示:eHihXZhJUid9mLFTdU17sk223Klksdkl223k23
点击回车就会开始验证,如果证书申请成功回显示如下信息:
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/yangqiang.im/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/yangqiang.im/privkey.pem
Your cert will expire on 2018-08-30. 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"
- 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.
- 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
现在在目录中应该有证书文件了:
[root@hp certbot]# ls /etc/letsencrypt/live/yangqiang.im/
cert.pem chain.pem fullchain.pem privkey.pem README
自动续期
因为证书的有效期只有90天,所以我们需要通过以下方式来续期。
可以通过以下命令来测试自动续期功能是否正常:
$ sudo certbot renew --dry-run
如果正常,我们可以通过系统的cron
任务来定时执行续期命令:
$ certbot renew
注意:
如果使用cron
任务等定时执行的方式,推荐每天执行两次(除非你的证书需要续约或撤销,否则它不会执行任何操作,但是如果由于某种原因发生了加密发起的撤销,则定期运行它会让你的网站有机会一直保持在线状态)。请在一小时内为你的续订任务选择一个随机分钟。
一个cron任务的例子可能是这样的,它会在每天的23:00和早上7:00运行:
0 23,7 * * * python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew
entos7中先使用
crontab -e
命令,这时候会打开一个vi编辑器。然后把cron任务命令保存进去,用wd保存退出。
推荐一个cron命令在线测试的工具:Cron表达式在线测试工具
查看更多 > > >
不登高山,不知天之高也;不临深溪,不知地之厚也
感谢指点、交流、喜欢