xiaolingzi's blog

每天都在成长...

欢迎您:亲

linux下使用let's encrypt免费ssl通配符域名证书支持https

xiaolingzi 发表于 2018-03-28 10:19:05

之前写过一篇let's encrypt证书的文章,但已经过期了,所以就再更新一篇。大好的消息是,目前let's encrypt已经支持通配符域名证书,也就是只需要生成*.xxx.com证书,就可以给所有xxx.com和子域名使用了。还有就是,现在已经支持DNS验证的方式,也方便了很多了。生成证书的工具不少,这里我们主要介绍使用certbot工具通过DNS验证的方式来生成通配符域名证书。

由于docker的流行,目前certbot也提供的相应的docker,有普通docker,也有针对不同域名服务商的docker,这样也就更加便利了。docker地址如下:

https://hub.docker.com/u/certbot/

这里我们主要也是推荐使用docker的方式来进行,但运行容器需要先安装docker程序。关于docker的安装这里只是简单说一下centos下的安装,更详细的可以自行Google,如果已经安装过可以跳过。


一、安装docker

centos下安装docker可以直接使用yum install docker进行安装,但默认安装的版本都比较低,可以先安装最新的源,再进行安装,如下:

yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install docker-ce

这样我们就安装好docker了,然后运行docker,命令如下:

systemctl start docker

可以执行 docker -v 来输出docker版本。


二、安装证书

关于cerbot docker方式的使用官网也有介绍,地址如下:

https://certbot.eff.org/docs/install.html#running-with-docker

1. 下载certbot的docker镜像

docker pull certbot/certbot

下载完支持可以通过 docker images 来查看已下载到本机的镜像。


使用DNS方式进行安装,需要使用手动模式,并且使用acme 2.0版本。所以certbot执行命令中需要加上--manual参数和--server参数知道acme服务版本地址。命令如下:

docker run -it --rm --name certbot \
            -v "/etc/letsencrypt:/etc/letsencrypt" \
            -v "/var/lib/letsencrypt:/var/lib/letsencrypt" \
            certbot/certbot certonly --manual --server https://acme-v02.api.letsencrypt.org/directory

执行过程如下:


Saving debug log to /var/log/letsencrypt/letsencrypt.log

Plugins selected: Authenticator manual, Installer None

Please enter in your domain name(s) (comma and/or space separated)  (Enter 'c'

to cancel): *.xxx.com

Obtaining a new certificate

/usr/local/lib/python2.7/site-packages/josepy/jwa.py:107: CryptographyDeprecationWarning: signer and verifier have been deprecated. Please use sign and verify instead.

  signer = key.signer(self.padding, self.hash)

Performing the following challenges:

dns-01 challenge for xxx.com


-------------------------------------------------------------------------------

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


-------------------------------------------------------------------------------

Please deploy a DNS TXT record under the name

_acme-challenge.xxx.com with the following value:


Sqf6BJ98JKm8-hHdhGNzdKAVa052B9TsFhSX7r-7aG0


Before continuing, verify the record is deployed.

-------------------------------------------------------------------------------

Press Enter to Continue


第一步会要求属于域名,这里我们输入通配符域名 *.xxx.com,回车继续

第二步让你确认是否IP被记录,输入Y,回车继续

第三步会输出DNS信息,这时先不要继续,转到你的域名服务商控制台,为域名添加一条txt记录,主机名为_acme-challenge,值为Sqf6BJ98JKm8-hHdhGNzdKAVa052B9TsFhSX7r-7aG0,这些上面都有输出,添加时改为自己输出的。

添加完之后我们检验一下txt记录是否生效,windows的话在cmd名称窗口中输入一下命令:

nslookup -qt=txt _acme-challenge.xxx.com

域名改为实际的,如果有应答就说明生效了,这是我们再回到刚才linux的会话当中,按回车继续,就会生成域名的证书了。域名证书所在目录如下:

/etc/letsencrypt/live/xxx.com/


三、更新证书

更新正式我们也一样使用docker的方式,主要使用cerbot的renew命令。完整命令如下:            

docker run -it --rm --name certbot \
            -v "/etc/letsencrypt:/etc/letsencrypt" \
            -v "/var/lib/letsencrypt:/var/lib/letsencrypt" \
            certbot/certbot renew

可以将上面的命令存为sh文件,然后通过crond定期执行更新就好,证书的有效期默认是3个月,可以每星期或者每天执行一次都可以,如果还没达到更新时间,它会有相应的提示,如果达到更新时间就会更新证书。


四、多服务器使用

对于网站部署在多台服务器上的,可以通过rsyncd同步将证书到各台服务器去,或者通过nfs进行文件共享。


附:

let's encrypt官网地址:

https://letsencrypt.org/


      

转载请注明出处:http://www.xxling.com/article/3116.aspx

  • 分类: Linux
  • 阅读: (1119)
  • 评论: (0)
拍砖 取消
请输入昵称
请输入邮箱
*
 选择评论类型
300字以内  请输入评论内容