Ubuntu下certbot申请和部署证书

前面总结的获取证书方式里,使用的是先手动生成CSR文件和密钥对,然后再根据CSR文件生成自签名证书,最后进行CRL和OCSP校验。接下来就把自己在Ubuntu下用certbot申请和部署Let’s Encrypt证书的过程和步骤也总结一下。Let’s Encrypt只能申请DV证书(Domain Validated),也就是最常见的一种证书,还记得之前说到证书分类,DV,OV和EV证书的分类方式是根据验证证书的模式不同,从证书审核的严格程度来排的,审核严谨度DV证书<OV证书<EV证书。Let’s Encrypt CA只提供DV证书申请的原因,在于它自己创建的ACME协议,用来自动化管理证书的申请,更新和销毁,这和一些普通的传统的CA机构不同,一般的CA机构以上操作多多少少都要人工操作,尤其是撤销证书需要人工提交申请,人工审核,撤销过程很长。

 

ACME协议域名校验

ACME协议是Let’s Encrypt CA机构设计的用来自动化管理证书申请,更新和签发。在证书申请阶段,有的CA机构为了更快速,会在收到CSR文件后,生成服务器实体密钥对,但是,一般来说,服务器公钥由服务器提供就好,如果CA机构来生成服务器密钥对,那么CA机构也拥有了服务器私钥。ACME协议则不同,密钥对的生成在客户端代理上,来看看该协议下的申请和域名校验过程:

  1. 客户端代理首先创建一个代理账户,并生成一对密钥对,作为通信密钥对,这个通信密钥对作用是在与ACME之间通信的校验,客户端代理会把通信密钥对中的公钥发送给Let’s Encrypt CA机构。
  2. 接着客户端代理可与开始证书申请,首先要对域名进行校验,前面说到,Let’s Encrypt CA只签发DV证书,DV证书的域名校验方式有两种:一,DNS方式,配置域名的DNS TXT记录。二,HTTP  well-known URL资源方式,在域名服务器的80端口上配置一个URL,该资源文件用来审核身份。
  3. 客户端代理对接下来与Let’s Encrypt CA通信的消息使用通信密钥对的私钥签名,发送给Let’s Encrypt CA。
  4. 最后,Let’s Encrypt CA收到客户端代理的请求,使用通信密钥对的公钥进行验证,完成域名校验,此时,客户端代理就可以进行证书的申请、更新,续期和销毁操作了。

要特别注意的是,上面的通信密钥对并不是服务器密钥对,通信密钥对用来保证ACME协议通信过程的安全,接下来客户端代理在进行证书申请过程中,才会生成服务器密钥对。客户端代理生成服务器密钥对和CSR文件,CSR文件使用服务器公钥进行签名,最后整个消息使用通信密钥对的私钥进行签名。

 

Nginx插件

Certbot客户端使用Nginx插件获取证书,也可以使用其他例如apache插件等,前提准备好一个自己的一个域名,以Nginx插件为例,在Ubuntu下用apt-get命令来安装:

sudo apt-get install nginx

然后添加包package repository:

sudo add-apt-repository ppa:certbot/certbot

安装nginx添加完包后,更新下apt源数据:

sudo apt-get update

最后一步,安装Certbot的nginx package:

sudo apt-get install python-certbot-nginx

到这一步,完成了Certbot客户端的安装,接下来要先配置nginx。

配置

在Ubuntu下用vi编辑器打开路径etc/nginx/sites-available/default文件,找到server{ …… }位置,然后添加自己的域名server_name:

sudo vi /etc/nginx/sites-available/default

:wq保存退出,然后用sudo nginx –t命令查看配置文件有没有错:

 

Certbot客户端

Certbor客户端安装完成,nginx插件配置好后,就可以用它来申请Let’s Encrypt证书,用certbot有两种方式申请证书,第一种用certonly子命令,该命令生成的证书文件保存在/etc/letsencrypt路径下,虽然certonly模式会让certbot启动nginx,但不会配置相应的HTTPS命令,也就是上面的nginx配置,需要我们收到去配置nginx插件的server_name。certonly仅仅是获取证书,不会去安装证书。

第二种模式是用certbot run子命令,该命令在获取证书后,会自动修改nginx插件(或是其他web服务器插件)的配置文件,然后重启web服务器。

签发SSL证书

Certbot客户端签发ssl证书的命令:

sudo certbot –nginx –d zzzjustin.com –d www.zzzjustin.com

把两个-d参数后面换成自己的服务器域名。

等待证书生成完毕后,你就可以从输出种看到,生成的证书在路径/etc/letsencrypt/live/zzzjustin.com(你自己的服务器域名)/fullchain.pem下,还有证书的失效日期expire on 2020-04-22。

      对于Let’s Encrypt CA签发的证书来说,其证书链中的中间证书可能不止一个,两个中间证书都可以校验证书服务器的身份,前面在证书链部分也说过有交叉验证这一回事,即一个CA机构给另一个CA机构签发二级证书,由于很多操作系统没有将Let’s Encrypt的根证书纳入到自己的可信任列表中,所以会让其他CA机构如DST Root CA X3或者ECDSA机构签名的中间证书来签发服务器实体证书。Let’s Encrypt CA签发的证书支持CT机制,也就是证书透明度,SCT签名证书时间戳信息可以从证书的OCSP服务中得到,证书一旦签发,会自动发送签发日志给各个证书日志logs,开始审计Auditors和监视Monitors也会相应开始运作。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章