Let's Encrypt與Certbot

Let's Encrypt與Certbot

[toc]

1 Let's Encrypt

1.1 About Let's Encrypt

Let’s Encrypt is a free, automated, and open certificate authority (CA), run for the public’s benefit. It is a service provided by the Internet Security Research Group (ISRG).

We give people the digital certificates they need in order to enable HTTPS (SSL/TLS) for websites, for free, in the most user-friendly way we can. We do this because we want to create a more secure and privacy-respecting Web.

The key principles behind Let’s Encrypt are:
Free: Anyone who owns a domain name can use Let’s Encrypt to obtain a trusted certificate at zero cost.
Automatic: Software running on a web server can interact with Let’s Encrypt to painlessly obtain a certificate, securely configure it for use, and automatically take care of renewal.
Secure: Let’s Encrypt will serve as a platform for advancing TLS security best practices, both on the CA side and by helping site operators properly secure their servers.
Transparent: All certificates issued or revoked will be publicly recorded and available for anyone to inspect.
Open: The automatic issuance and renewal protocol will be published as an open standard that others can adopt.
Cooperative: Much like the underlying Internet protocols themselves, Let’s Encrypt is a joint effort to benefit the community, beyond the control of any one organization.

We have a page with more detailed information about how the Let’s Encrypt CA works.

1.2 Getting Started

為了在網站上啟用https,我們需要從CA(Certificate Authority)申請一個證書,Let’s Encrypt是一個CA 。為了從Let's Encrypt獲取我們網站域名的證書,我們必須證明對域名的控制權。使用Let's Encrypt,我們可以使用使用ACME協議的軟件來執行此操作,該協議通常在我們的Web主機上運行。

如果有用shell訪問web主機的權限,推薦使用Certbot ACME客戶端,它可以自動執行證書頒發和安裝,無需停機。它還為不想要自動配置的人提供專家模式。它易于使用,適用于許多操作系統,并且具有出色的文檔。
如果Certbot不滿足你的需求, 還有其他的ACME客戶端 供選擇。

2 Certbot

Certbot 官網

2.1 安裝Certbot

Get Certbot

2.1.1 使用certbot-auto方式安裝

推薦使用certbot-auto,使用它會自動創建python venv虛擬環境,并在其中安裝certbot及其依賴

user@webserver:~$ wget https://dl.eff.org/certbot-auto
user@webserver:~$ chmod a+x ./certbot-auto
user@webserver:~$ ./certbot-auto --help
Usage: certbot-auto [OPTIONS]
A self-updating wrapper script for the Certbot ACME client. When run, updates
to both this script and certbot will be downloaded and installed. After
ensuring you have the latest versions installed, certbot will be invoked with
all arguments you have provided.

Help for certbot itself cannot be provided until it is installed.

  --debug                                   attempt experimental installation
  -h, --help                                print this help
  -n, --non-interactive, --noninteractive   run without asking for user input
  --no-bootstrap                            do not install OS dependencies
  --no-self-upgrade                         do not download updates
  --os-packages-only                        install OS dependencies and exit
  --install-only                            install certbot, upgrade if needed, and exit
  -v, --verbose                             provide more output
  -q, --quiet                               provide only update/error output;
                                            implies --non-interactive

可以創建 certbot-auto 軟鏈接到 /usr/bin/ 或者 /usr/local/bin/ 下,這樣就可以直接執行命令

根據提示安裝certbot和依賴,需要使用root用戶

user@webserver:~# ./certbot-auto --install-only

查看certbot幫助

user@webserver:~# ./certbot-auto -h

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

  certbot-auto [SUBCOMMAND] [options] [-d DOMAIN] [-d DOMAIN] ...

Certbot can obtain and install HTTPS/TLS/SSL certificates.  By default,
it will attempt to use a webserver both for obtaining and installing the
certificate. The most common SUBCOMMANDS and flags are:

obtain, install, and renew certificates:
    (default) run   Obtain & install a certificate in your current webserver
    certonly        Obtain or renew a certificate, but do not install it
    renew           Renew all previously obtained certificates that are near
expiry
    enhance         Add security enhancements to your existing configuration
   -d DOMAINS       Comma-separated list of domains to obtain a certificate for

  --apache          Use the Apache plugin for authentication & installation
  --standalone      Run a standalone webserver for authentication
  --nginx           Use the Nginx plugin for authentication & installation
  --webroot         Place files in a server's webroot folder for authentication
  --manual          Obtain certificates interactively, or using shell script
hooks

   -n               Run non-interactively
  --test-cert       Obtain a test certificate from a staging server
  --dry-run         Test "renew" or "certonly" without saving any certificates
to disk

manage certificates:
    certificates    Display information about certificates you have from Certbot
    revoke          Revoke a certificate (supply --cert-path or --cert-name)
    delete          Delete a certificate

manage your account with Let's Encrypt:
    register        Create a Let's Encrypt ACME account
  --agree-tos       Agree to the ACME server's Subscriber Agreement
   -m EMAIL         Email address for important account notifications

More detailed help:

  -h, --help [TOPIC]    print this message, or detailed help on a topic;
                        the available TOPICS are:

   all, automation, commands, paths, security, testing, or any of the
   subcommands or plugins (certonly, renew, install, register, nginx,
   apache, standalone, webroot, etc.)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

運行certbot命令查看現有證書

user@webserver:~# ./certbot-auto certificates
Saving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - 
No certs found.
- - - - - - - - - - - - - - - - - - - - - - 

文件certbot-auto中有venv的位置

 if [ -z "$VENV_PATH" ]; then
   # We export these values so they are preserved properly if this script is
   # rerun with sudo/su where $HOME/$XDG_DATA_HOME may have a different value.
   export OLD_VENV_PATH="$XDG_DATA_HOME/letsencrypt"
   export VENV_PATH="/opt/eff.org/certbot/venv"
 fi

我們可以嘗試運行venv環境,檢查安裝的包

[root@journal certbot]# pwd
/opt/eff.org/certbot
[root@journal certbot]# ll
drwxr-xr-x 5 root root 4096 Dec 19 11:33 venv
[root@journal certbot]# source venv/bin/activate
(venv) [root@journal certbot]# pip list |grep certbot
certbot (0.29.1)
certbot-apache (0.29.1)
certbot-nginx (0.29.1)
(venv) [root@journal certbot]# deactivate
[root@journal certbot]# 

2.1.2 使用Ansible批量安裝

certbot-auto是官方給出的使用vitrualenv方式安裝certbot的方法,此方法簡單易用,但是由于對腳本邏輯不太了解,可能會對管理上帶來困難。
我們自己用vitrualenv方式安裝certbot,下面是Ansible批量安裝的一個playbook

install-certbot.yml

---
- hosts: webpool-qa:webpool-live
  become: yes 
  gather_facts: false
  tasks:
    - name: 1. Install certbot into virtualenv
      pip: 
        name: certbot
        state: present
        virtualenv: /root/python-certbot
    - name: 2. Ensure logger(util-linux) have been installed
      yum: 
         name: util-linux
         state: present
    - name: 3. Install cert_renew.sh script
      copy: 
        src: ./scripts/cert_renew.sh
        dest: /root/cert_renew.sh
        mode: 0755
    - name: 4. Copy cert_posthook.sh if it not exists
      copy:
        src: ./scripts/cert_posthook.sh
        dest: /root/cert_posthook.sh
        mode: 0755
        force: no
    - name: 5. Create certbot job on root account
      cron: 
        name: "certbot renew job"
        state: present
        minute: 45
        hour: 14
        job: "/root/cert_renew.sh 2>&1 | /usr/bin/logger -t certbot"

cert_renew.sh

#!/bin/bash

source /root/python-certbot/bin/activate
certbot renew --post-hook "/root/cert_posthook.sh"

cert_posthook.sh

#!/bin/bash

#Restart local httpd
/sbin/service httpd restart

執行下列命令進行安裝

# ansible install-certbot.yml

2.1.3 其他方式安裝

我們還可以使用git版本的Certbot Use git version certbot

2.2 申請證書

Certbot User Guide

申請證書腳本

[root@journal ~]# mkdir certbot
[root@journal ~]# mv certbot-auto certbot/
[root@journal ~]# cd certbot/
[root@journal ~]# vim cert_apply.sh 
#!/bin/bash
./certbot-auto certonly --webroot \
    -w /data/web -d example.demo.com \

自動renew腳本

[root@journal ~]# vim cert_renew.sh
#!/bin/bash
./certbot-auto renew --post-hook "service httpd restart"
# certbot renew --pre-hook "service nginx stop" --post-hook "service nginx start"

有效期在30天以上的證書,可使用--force-renewal強制更新;
注意:證書更新過一次之后,會在/etc/letsencrypt/renewal目錄下生成對應證書名稱的配置文件,記錄更新時使用的參數、配置等。

renew腳本定時任務

(需要logger命令),最好觸發測試一下

[root@journal certbot]# crontab -l

# renew letsencrpyt SSL certificate 
36 15 * * 1-5 /root/certbot/cert_renew.sh 2>&1 | /usr/bin/logger -t certbot

2.3 為網站添加證書流程

查看原證書信息

# ./certbot-auto certificates

編輯申請證書腳本,添加新網站

# vim cert_apply.sh

確認vhost配置文件內原證書位置

# cd /etc/httpd/conf.d/
# grep .pem . -R 
或
# grep .pem domain.demo.com.conf

如果提示會生成新的證書,而不是擴展原有證書,則刪除原有證書 ,在重啟apache之短時間內原證書仍然生效

# ./certbot-auto delete

生成新證書 ,確保證書位置與原來的一致

# ./cert_apply.sh

檢查apache配置文件語法

# apachectl -t

如果Syntax OK,重啟apache服務

# systemctl restart httpd
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,156評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,401評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 176,069評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,873評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,635評論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,128評論 1 323
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,203評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,365評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,881評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,733評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,935評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,475評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,172評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,582評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,821評論 1 282
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,595評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,908評論 2 372

推薦閱讀更多精彩內容