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也會相應開始運作。

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