Let's Encrypt 由網際網路安全研究小組(縮寫 ISRG )提供服務。主要贊助商包括電子前哨基金會、Mozilla 基金會、Akamai 以及思科。2015年4月9日,ISRG 與 Linux 基金會宣佈合作。
用以實現新的數字證照認證機構的協議被稱為自動證照管理環境(ACME)。GitHub 上有這一規範的草案,且提案的一個版本已作為一個 Internet 草案發布。Let's Encrypt 宣稱這一過程將十分簡單、自動化並且免費Certbot 為 Let’s Encrypt 專案釋出了一個官方的客戶端 Certbot ,利用它可以完全自動化的獲取、部署和更新安全證照,並且 Certbot 是支援所有 Unix 核心的作業系統。
最近打算給公司所有的域名都配置上 https 服務,開始配置了幾個 nginx
服務的都比較順利,嗯,Certbot
真好用。直到遇到一臺 Centos6 + Tomcat7 + openjdk1.7 的環境(這環境絕了),真香(當然,這與 Certbot
無關)。
按照 Certbot 官網操作下載 Certbot
客戶端:
$ wget https://dl.eff.org/certbot-auto
$ sudo mv certbot-auto /usr/local/bin/certbot-auto
$ sudo chown root /usr/local/bin/certbot-auto
$ sudo chmod 0755 /usr/local/bin/certbot-auto
只要網路沒有問題,這一步完全沒有問題。接下來 Cerbot
提供了兩種使用方式
- webroot 方式: certbot 會利用既有的 web server,在其 web root 目錄下建立隱藏檔案,Let’s Encrypt 服務端會透過域名來訪問這些隱藏檔案,以確認你的確擁有對應域名的控制權。
- standalone 方式: Certbot 會自己執行一個 web server 來進行驗證。如果我們自己的伺服器上已經有 web server 正在執行 (比如 Nginx 或 Tomcat ,主要是看你的
80
埠有沒有被佔用),用 standalone 方式的話需要先關掉它,以免衝突
這裡我採用了 webroot
方式
$ sudo /usr/local/bin/certbot-auto certonly --webroot
災難從這裡開始。執行該命令提示需要安裝epel-release
,OK ,小問題。我一個 yum intall
命令下去.....,提示找不到這個包,不慌 yum
不行我們換 rpm
。順利使用 rpm 安裝 epel-release
包,開心。再次執行 webroot
命令,再次報錯需要 Python
版本大於 2.7
。穩住,檢視一下當前系統Python
版本 ,好吧,當前Pyrhon
版本為空,這都是小問題,我一個yum install
命令下去......,WTK ,yum 命令不存在。沒關係,我們搜尋一下,萬能的網際網路。這裡有一個需要注意的地方,網上給出的 rpm
包的版本可能不是最新的版本,會導致下載不成功。具體的版本以映象庫實際版本為準。
先安裝 Python
,rpm
包不要一個一個安裝,安裝包之間有順序依賴。使用 rpm -ivh python-*
一次性安裝沒有問題
$ mkdir /usr/local/src/python
$ wget http://mirrors.aliyun.com/centos/6/os/x86_64/Packages/python-2.6.6-66.el6_8.x86_64.rpm
$ wget http://mirrors.aliyun.com/centos/6/os/x86_64/Packages/python-iniparse-0.3.1-2.1.el6.noarch.rpm
$ wget http://mirrors.aliyun.com/centos/6/os/x86_64/Packages/rpm-python-4.8.0-59.el6.x86_64.rpm
$ wget http://mirrors.aliyun.com/centos/6/os/x86_64/Packages/python-devel-2.6.6-66.el6_8.x86_64.rpm
$ wget http://mirrors.aliyun.com/centos/6/os/x86_64/Packages/python-pycurl-7.19.0-9.el6.x86_64.rpm`
$ wget http://mirrors.aliyun.com/centos/6/os/x86_64/Packages/python-urlgrabber-3.9.1-11.el6.noarch.rpm
$ wget http://mirrors.aliyun.com/centos/6/os/x86_64/Packages/python-libs-2.6.6-66.el6_8.x86_64.rpm
$ rpm -ivh python-*
安裝 rpm-python
包時,可能會安裝不成功。請使用下面的程式碼,強制安裝,沒有問題
$ rpm -i --force --nodeps rpm-python-4.8.0-59.el6.x86_64.rpm
再安裝 yum
$ mkdir /usr/local/src/yum
$ wget http://mirrors.aliyun.com/centos/6/os/x86_64/Packages/yum-3.2.29-81.el6.centos.noarch.rpm
$ wget http://mirrors.aliyun.com/centos/6/os/x86_64/Packages/yum-metadata-parser-1.1.2-16.el6.x86_64.rpm
$ wget http://mirrors.aliyun.com/centos/6/os/x86_64/Packages/yum-plugin-fastestmirror-1.1.30-41.el6.noarch.rpm
$ rpm -ivh yum-*
好的,此時我們的 yum
回來了,執行一下 Pyhton
命令。沒錯,還是可恥的 2.6
版本。沒關係我們再來安裝 Python2.7
。
- 安裝 Development Tools
$ yum groupinstall "Development tools"
- 安裝 Python 依賴包
$ yum install -y zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel tcl-devel tk-devel
- 下載及安裝 Python 2.7.12
$ cd /opt $ wget --no-check-certificate https://www.python.org/ftp/python/2.7.12/Python-2.7.12.tar.xz $ tar xf Python-2.7.12.tar.xz $ cd Python-2.7.12 $ ./configure --prefix=/usr/local $ make && make install
- 將 Python 命令指向 Python 2.7.12
ln -s /usr/local/bin/python2.7 /usr/local/bin/python
5 檢查 Python 版本
$ pyhton --version Python 2.7.12
6 由於 yum 依賴於 Python 2.6,指定 yum 的 Python 版本依賴
$ whereis yum yum: /usr/bin/yum /etc/yum.conf $ vim /usr/bin/yum
修改檔案第一行為:
#!/usr/bin/python2.6.6
至此,環境恢復完畢。
重新安裝epel-release
環境依賴。$ yum install -y epel-release
使用 webroot 方式生成指定域名證照
$ cd /usr/local/bin $ sudo ./certbot-auto certonly --webroot
命令執行成功,會提示你輸入需要生成證照的域名(
必填
)和專案部署的目錄(必填
)以及郵箱資訊(可選
,Certbot
證照有效期90
天,到期後向你設定的郵箱傳送郵件),輸入完資訊會生成證照檔案。
生成證照中會建立/etc/letsencrypt
資料夾, 證照檔案預設存放在/etc/letsencrypt/live/example.com
資料夾中, 其中example.com
取自第一個域名,在example.com
資料夾中包含 4 個檔案,cert.pem
域名證照,chain.pem
根證照及中間證照,fullchain.pem
由cert.pem
和chain.pem
合併而成,privkey.pem
證照私鑰。
建立一個 2048 位的 Diffie-Hellman 檔案 (nginx 預設使用 1024 位的 Diffie–Hellman 進行金鑰交換, 安全性太低)
openssl dhparam -out /etc/letsencrypt/live/dhparams.pem 2048
Tomcat
需要使用 .jks
格式的證照檔案,進入證照所在目錄使用 keytool
工具生成 .jks
證照
$ cd /etc/letsencrypt/live/example.com
$ openssl pkcs12 -export -in fullchain.pem -inkey privkey.pem -out fullchain_and_key.p12 -name tomcat
這裡要求設定密碼 yourPassword
,下面生成證照時會用到。
$ keytool -importkeystore -deststorepass 'yourPassword' -destkeypass 'yourPassword' -destkeystore MyDSKeyStore.jks -srckeystore fullchain_and_key.p12 srcstoretype PKCS12 -srcstorepass 'yourPassword' -alias tomcat
把生成的 MyDSKeyStore.jks
證照檔案 複製到 Tomcat
配置目錄下。
$ cp MyDSKeyStore.jks /usr/local/tomcat7/conf
修改或增加 Tomcat
配置
<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="443" />
<Connector port="443" protocol="org.apache.coyote.http11.Http11Protocol"
URIEncoding="UTF-8" maxThreads="150" SSLEnabled="true"
scheme="https" secure="true" clientAuth="false"
sslProtocol="TLS"
keystoreFile="/usr/local/tomcat7/conf/MyDSKeyStore.jks"
keystorePass="yourPassword"
keyAlias="tomcat"
keyPass="yourPassword"/>
重啟 Tomcat
服務,即可訪問 https://example.com
本作品採用《CC 協議》,轉載必須註明作者和本文連結