您的位置:晶晶的博客>Linux>申请Let's Encrypt免费ssl证书流程和部署https服务

申请Let's Encrypt免费ssl证书流程和部署https服务

Let's Encrypt申请免费ssl证书

Let's Encrypt一个于2015年三季度推出的数字证书认证机构,提供免费的ssl证书,Let's Encrypt的证书颁发机制基于ACME协议(ACME protocol),ACME协议是什么不用梳理的很清楚,简单点来说就是一种用于快速认证、颁发ssl证书的处理流程和认证机制。

通常获取ssl证书都有一步需要验证域名拥有者的过程,避免证书颁发给了非域名拥有者或管理者,通常的做法是数字证书认证机构向拟申请ssl证书的域名为后缀的特定邮箱发送一封验证码邮件,或者让你在域名记录中添加一条特定的记录(txt记录、mx记录等等不一而同);而ACME协议则简化了这个过程,可以直接通过http(或https)自主认证,简单点来说就是:证书颁发机构能够通过域名直接访问到你服务器上特定的标识文件,就证明你是该域名的拥有者。能够证明你是该域名的拥有者或者说管理者,就可以直接向该域名颁发ssl证书了。

letsencrypt基于ACME协议自助颁发证书的过程由letsencrypt提供一个工具完成,工具名称现在叫做:certbot,在linux下certbot工具安装后也就是certbot命令。

letsencrypt官方网站:https://letsencrypt.org/

certbot有个英文教程网站:https://certbot.eff.org/

一、安装certbot工具

Certbot是用Python写的,官方建议Python2.7及其以上环境。建议嘛!不是非得2.7的。CentOS6系列默认的Python是2.6.6,实际测试发现也是可以使用的,不要惊慌的升级CentOS6系列下的Python结果搞死一堆软件。

开始之前有一个点要留意:拟申请ssl证书的域名(包括主机名部分)需要解析到公网能访问到的机器上,并且整个操作过程均在该机器上执行;本次示例仅申请单域名ssl证书。

本次部署使用的生产环境为centos6.5_x86,centos的6系列和7系列安装certbot还是有稍许差异的。6系列yum的epel库中尚未收录certbot,所以建议使用github下载源码的方式安装。以下分centos7系列和centos6系列讲解安装certbot的方法,其目的就是将certbot工具正确安装上。

1、centos7系列安装certbot

##安装epel-release扩展包
yum install epel-release
##更新yum缓存
yum makecache
##直接yum安装certbot
yum install certbot

默认yum源里的epel-release工具版本太低,直接rpm安装:

1、打开网页 https://dl.fedoraproject.org/pub/epel/7/x86_64/e/
2、查找该网页中列出的epel-release软件包,找到该软件包的url,本次试验为:https://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-8.noarch.rpm
3、rpm安装epel-release包
rpm -vih https://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-8.noarch.rpm
或者
wget https://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-8.noarch.rpm
rpm -ivh epel-release-7-8.noarch.rpm
4、yum makecache
5、yum install certbot

2、centos6系列安装certbot

这也是本次试验的安装方法,centos6系列的epel库里没有收录certbot这个rpm包,只能从github下载release包或者直接git克隆certbot项目的源代码。所以又有2种安装方法,选择一种即可:

2.1、了解git版本库工具和git这个命令的安装方法

直接使用git的克隆命令,将github上certbot项目的代码克隆至本地就可以使用:

##使用git命令克隆certbot这个项目到当前目录
git clone https://github.com/certbot/certbot
git获取certbot源码

请先确保你的服务器环境支持git,也就是git这个命令可以正常跑起来。天朝由于众所周知的原因,git命令从github克隆项目,有时候会比较耗时。该克隆命令执行完毕,当前工作目录下将会自动生成一个名为certbot的文件夹。

2.2、直接下载release包的方法

github上每个项目都有不同版本的release包提供下载,直接下载certbot项目已release的包,本次试验之时certbot在github上的最新release为0.9.3

##wget命令下载最新的release包并在当前工作目录下重新命名为certbog.tgz 
wget -O certbog.tgz https://codeload.github.com/certbot/certbot/tar.gz/v0.9.3
##解压certbog.tgz这个要所报
tar zxvf certbog.tgz
##为了便于统一叙述将解压出来的certbot-0.9.3文件夹重命名为certbot
mv certbot-0.9.3 certbot

无论你使用2.1还是2.2中的方法得到certbot的源码后,目前在你的工作目录下将产生一个名为certbot的文件夹,进入该文件夹会发现有一个certbot-auto的可执行文件,并没有发现名为certbot的可执行文件;其实呢这个certbot-auto和certbot是同一回事。

centos7系列通过yum安装后环境变量里就可以直接使用certbot命令了,而centos6系列则需要使用完整路径的certbot-auto命令,要是嫌麻烦可以将当前工作目录下的certbot路径加入环境变量。

安装完certbot,主要就是为了使用certbot或者(certbot-auto)这个命令,分为centos7和centos6两个系列讲解安装方法是因为本次我的示例环境是centos6系列。这里假设你对环境变量、软链接已熟悉,并可以在命令行下正常使用certbot或(certbot-auto)命令。

二、使用certbot工具申请letsencrypt的免费ssl证书

申请ssl证书之前,先梳理几个要点:

1、确定好拟申请ssl证书的域名,这里为了便于说明假设申请ssl的域名为:c1c2.test.com,你也可以申请www.test.com、account.test.com等其他域名(和主机),没有本质上的区别,仅名称上的差异;

2、确定拟申请ssl证书的域名正确解析到当前主机,本例也就是通过https://c1c2.test.com能够正确解析到当前主机(注意是正确解析,至于是不是能正确访问依据certbot的模式不同要求也不同);

3、确定好拟申请ssl证书域名解析到当前主机后的web根目录,假设为:/var/www

certbot申请ssl有多种模式和方法可选,而且certbot试图成为一个集申请ssl证书、安装ssl证书于一体的智能化工具,这也导致了certbot目前有多种使用方法;将ssl证书申请和自动化安装集成于一体当然是好事儿,但由于当前市面服务器软件多种多样,必然导致兼容性要得到保障的话certbot工具还需要较长一段时间来完善。所幸理解清楚certbot工具到底能做些什么,分哪些过程和步骤,哪些是不需要certbot帮我自动完成的就可以了。本文仅仅将certbot当做一个申请ssl证书的工具,并不需要certbot来帮我们自动完善nginx下启用https访问的配置文件。

2.1、standalone模式申请ssl证书

standalone模式不需要上述梳理出的3个要点中的第三条,也就意味着如果你的主机需要关停80端口(或和443端口)的web服务,譬如正在运行的nginx、Apache需要关停。

##standalone模式,其中-d参数指定拟申请ssl证书的域名
#可以通过多个-d参数指定多个域名,但你得确保这些指定的多个域名均能正常解析到当前主机
./certbot-auto certonly --standalone -d c1c2.test.com

2.2、非standalone模式申请ssl证书

这种模式需要使用-w参数(或者--webroot-path参数)指定当前正在运行的web服务器的根目录。--webroot-path 参数指定web根目录后,certbot工具会自动在该目录下生成.well-known的隐藏目录,以及用于效验域名所有者的特定文件,此文件Let's Encrypt的服务器会主动发起http请求去读取从达到效验域名所有者或者管理者就是本次操作certbot工具的人;certbot工具自动生成的完整目录为:-w参数指定的根目录/.well-known/acme-challenge,对于nginx而言web根目录下的隐藏目录默认情况下是不允许访问的,所以nginx情况下再执行非standalone模式申请ssl证书之前,需要将nginx网站根目录下的.well-known隐藏目录设置成允许访问。

##nginx对应主机的配置文件中添加允许.well-known隐藏目录的访问
#注意配置文件中禁止浏览隐藏文件的相关代码引起冲突
location ~ /.well-known {
   allow all;
}

如果熟悉nginx,甚至可以为.well-known隐藏目录指定单独的root入口;这就是nginx有关的合理利用了,不再补充。

给出命令的参考格式:

##--webroot指定当前正在运行的web server的根目录
certbot certonly --webroot -w /var/www/ -d c1c2.test.com

测试申请的截图:

certbot申请ssl证书成功的截图

这样在/etc/letsencrypt/live/你的域名作为目录名的目录这个目录下会自动生成ssl证书私钥和公匙,下图所示:

letsencrypt申请结果截图

4个pem文件,ssl里常见的证书文件,nginx用到fullchain.pemprivkey.pem这两个文件,一个公钥链,一个私钥。也就是nginx中ssl_certificate指令指定的就是fullchain.pem,而ssl_certificate_key指令指定的就是privkey.pem,当然如果不做移动的话,需要是完整路径,具体nginx配置就不墨迹了,关键的ssl证书和key都有了,就比较简单了。

三、证书更新

Let's Encrypt的证书有效期是90天,时间短了点儿,不过Let's Encrypt支持证书更新,到期前更新证书即可。certbot 提供了更新证书的命令cerbot renew,会自动更新所有已申请的ssl证书。

想要实现到期前自动更新的话,做个crontab任务,就不再多吧唧了。

转载请注明本文标题和链接:《申请Let's Encrypt免费ssl证书流程和部署https服务

相关推荐

哟嚯,本文评论功能关闭啦~

  1. #1

    博主提示 virtualenv: command not found

    yayazoo 7年前 (2017-12-13) 回复
  2. #2

    进来看看

    翻墙方法 8年前 (2016-12-29) 回复