1. 程式人生 > >CentOS 7 Nginx Let’ s Encrypt SSL 證書安裝配置

CentOS 7 Nginx Let’ s Encrypt SSL 證書安裝配置

https取代http是大勢所趨,越來越多的網站都改用https了。從16年起,蘋果公司就要求開發者使用https替代http,前期還可以通過調整應用的配置允許http通訊,到後來使用https成了強制要求。
對於個人開發者和小公司而言,很多時候不過是在伺服器進行一些簡單的資料、檔案儲存,對安全性也沒什麼要求,似乎沒有使用https的迫切需要,然而,如果你要釋出iOS應用,就必須支援https,這當然會給開發工作帶來一些麻煩。另一方面,以前使用聯通網路時,瀏覽網頁偶爾就會莫名其妙地出現聯通版iPhone的廣告等,如果以後大家都使用https,運營商就不容易亂放廣告了,呵呵~
搞https就得申請ssl證書,我們可以自己給自己簽發ssl證書,當然,瀏覽器是不承認的,所以還是得找權威機構。賽門鐵克這些公司頒發證書要收保護費,有無免費的呢?現在一些雲伺服器提供商已經可以提供免費的ssl證書,但是必須使用其提供的雲服務,限制比較大,另外發現能夠免費提供ssl證書的機構有startssl和Let’ s Encrypt。
我使用了startssl提供的證書服務,但是好景不長,startssl被360偷偷收購了,和沃通一起,沒有進行收購資訊披露。谷歌、狐狸等要求證書機構在規定日期前更新加密演算法,而startssl和沃通不按規矩辦事,在截至日期之後繼續使用過期的加密演算法,並且作弊把證書籤發日期改到截至日期之前,欺騙大家感情,這一行為最終暴露了,於是蘋果、谷歌、狐狸等移除了startssl和沃通的根證書,相應地,使用他們的證書的網站就不被信任了,至少是一年的時間。
現在只好使用Let’ s Encrypt提供的證書了,Let’ s Encrypt的證書怎麼搞到手呢?轉載一個比較詳細的交錯:
https://blog.itnmg.net/letsencrypt-ssl/
原文作者:IT農民工

Let’ s Encrypt 是一個免費的 SSL/TLS 證書發行機構, 證書有效期為90天, 到期前30內可續期, 實現永久免費.

本次安裝使用的伺服器配置:
DigitaIOcean VPS + CentOS 7 + Nginx 1.9.12

Let’ s Encrypt SSL 證書的的獲取並不是像其他網站一樣, 在頁面上填寫資申請證書, 而是需要在域名所在的伺服器上安裝一個客戶端(python寫的)去獲取證書和續期.

使用 Certbot 客戶端

Certbot 客戶端是現在官方推薦的客戶端

客戶端安裝

yum install certbot

獲取證書

申請過程中要驗證繫結的域名是否屬於申請人, 其原理就是申請人在域名所在的伺服器上申請證書, 然後 Let’ s Encrypt 會訪問繫結的域名與客戶端通訊成功即可通過.

這 個驗證的方法有兩種, 一種需要停止當前的 web server 服務, 讓出 80 埠, 由客戶端內建的 web server 啟動與 Let’ s Encrypt 通訊. 另一種不需要停止當前 web server , 但需要在域名根目錄下建立一個臨時目錄, 並要保證外網通過域名可以訪問這個目錄.

#建立臨時目錄,可能要修改nginx rewrite 規則才能從外網訪問
mkdir -p /usr/share/nginx/html/.well-known/acme-challenge
 
#--webroot 引數:指定使用臨時目錄的方式. -w 引數:指定後面-d 域名所在的根目錄, 如果一次申請多個域的, 可以附加更多 -w...-d... 這段.
certbot certonly --webroot --email 
[email protected]
-w /usr/share/nginx/html -d blog.itnmg.net -d itnmg.net -d www.itnmg.net

執行此命令後會生成證書, 儲存在 /etc/letsencrypt/live 中對應的域名目錄下面, 其實這裡面並不是真正的證書檔案,而是通過連結的形式鏈到了 /etc/letsencrypt/archive 中對應的域名目錄下.

證書自動續期

renew 引數是官方推薦的續期方式, 使用這個引數會遍歷 /etc/letsencrypt/live 下所有的證書, 如果證書在可續期的時間範圍內(過期前30天內), 就會申請新的證書並替換原有證書, 否則跳過.

#使用 --dry-run 引數測試續期命令, 使用這個引數並不會真正續期證書
certbot renew --dry-run
 
#正式續期證書
certbot renew

設定定時自動續期

可以將 certbot renew 命令加入到 cron 中定時執行

#--quiet 引數表示禁止輸出除了錯誤資訊以外的任何資訊
certbot renew --quiet

加入定時任務中
nano /etc/crontab

我這裡設定為每月28號23點執行此指令碼. 更新證書後重啟 nginx.
#分 時 日 月 星期 執行使用者 執行命令
0 23 28 * * root certbot renew --quiet && systemctl restart nginx

儲存退出

#載入定時任務, 使之生效
crontab /etc/crontab
 
#檢視任務
crontab -l


使用官方客戶端

客戶端安裝

Let’ s Encrypt 的客戶端託管在 github 上, 每次執行客戶端都會先自動升級, 再執行最新的客戶端, 所以需要安裝 git. 因為是 python 寫的程式, 所以需要安裝 python.

yum install git python

下載客戶端, 放到某路徑下
git clone https://github.com/letsencrypt/letsencrypt

執行一次客戶端, 自動檢查升級, 請確保記憶體足夠多, 大概要幾十兆吧.
cd letsencrypt
./letsencrypt-auto --help


如果沒什麼問題, 會顯示幫助文件.

獲取證書

通過客戶端 web server 獲取證書

#停止nginx
systemctl stop nginx
 
#獲取證書, --standalone 引數:使用內建web server. --email 引數:管理員郵箱,證書到期前會發郵件到此郵箱提醒. -d 引數:要繫結的域名,同一域的不同子域都要輸入.
./letsencrypt-auto certonly --standalone --email [email protected] -d blog.itnmg.net -d itnmg.net -d www.itnmg.net
 
#啟動nginx
systemctl start nginx

通過臨時目錄獲取證書

#建立臨時目錄,可能要修改nginx rewrite 規則才能從外網訪問
mkdir -p /usr/share/nginx/html/.well-known/acme-challenge
 
#--webroot 引數:指定使用臨時目錄的方式. -w 引數:指定後面-d 域名所在的根目錄, 如果一次申請多個域的, 可以附加更多 -w...-d... 這段.
./letsencrypt-auto certonly --webroot --email [email protected] -w /usr/share/nginx/html -d blog.itnmg.net -d itnmg.net -d www.itnmg.net


完成上面的操作即可獲得 SSL 證書, 儲存在 “/etc/letsencrypt/live/根域名/” 目錄下, 會產生 4 個檔案, 其中3個證書檔案, 1個私鑰檔案. 不要移動證書的位置, 以免續期時出現錯誤.

證書自動續期

證書續期的命令如下

./letsencrypt-auto renew

如果要指定更新某個域名的證書, 則要使用 certonly 引數, 其實和新申請證書時的命令差不多.
./letsencrypt-auto certonly --webroot --renew-by-default --email [email protected] -w /usr/share/nginx/html -d blog.itnmg.net -d itnmg.net -d www.itnmg.net


最終指令碼如下

#!/bin/sh
#停止 nginx 服務,使用 --standalone 獨立伺服器驗證需要停止當前 web server.
systemctl stop nginx
if ! /path/to/letsencrypt-auto renew -nvv --standalone > /var/log/letsencrypt/renew.log 2>&1 ; then
    echo Automated renewal failed:
    cat /var/log/letsencrypt/renew.log
    exit 1
fi
#啟動 nginx
systemctl start nginx

將這段指令碼儲存為 letsencrypt-renew.sh

新增可執行許可權

chmod +x letsencrypt-renew.sh

編輯 crontab 配置檔案或執行 crontab -e 新增 cron 任務
nano /etc/crontab

我這裡設定為每月28號23點執行此指令碼.

#分 時 日 月 星期 執行使用者 執行命令
 0 23 28 *  *   root    /指令碼目錄/letsencrypt-renew.sh


儲存退出即可.

配置 Nginx SSL 證書

nano /etc/nginx/conf.d/default.conf
找到 SSL 證書對應域名的 Server 段, 修改為如下設定(根據自身需求做調整)
#設定非安全連線永久跳轉到安全連線
server{
    listen 80;
    server_name blog.itnmg.net *.blog.itnmg.net itnmg.net www.itnmg.net;
    #告訴瀏覽器有效期內只准用 https 訪問
    add_header Strict-Transport-Security max-age=15768000;
    #永久重定向到 https 站點
    return 301 https://$server_name$request_uri;
}
server {
    #啟用 https, 使用 http/2 協議, nginx 1.9.11 啟用 http/2 會有bug, 已在 1.9.12 版本中修復.
    listen 443 ssl http2;
    server_name blog.itnmg.net *.blog.itnmg.net itnmg.net www.itnmg.net;
    #告訴瀏覽器當前頁面禁止被frame
    add_header X-Frame-Options DENY;
    #告訴瀏覽器不要猜測mime型別
    add_header X-Content-Type-Options nosniff;
    root /usr/share/nginx/html/wordpress;
 
    #證書路徑
    ssl_certificate /etc/letsencrypt/live/itnmg.net/fullchain.pem;
    #私鑰路徑
    ssl_certificate_key /etc/letsencrypt/live/itnmg.net/privkey.pem;
    #安全連結可選的加密協議
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    #可選的加密演算法,順序很重要,越靠前的優先順序越高.
    ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-RC4-SHA:!ECDHE-RSA-RC4-SHA:ECDH-ECDSA-RC4-SHA:ECDH-RSA-RC4-SHA:ECDHE-RSA-AES256-SHA:HIGH:!RC4-SHA:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!CBC:!EDH:!kEDH:!PSK:!SRP:!kECDH;
    #在 SSLv3 或 TLSv1 握手過程一般使用客戶端的首選演算法,如果啟用下面的配置,則會使用伺服器端的首選演算法.
    ssl_prefer_server_ciphers on;
    #儲存SSL會話的快取型別和大小
    ssl_session_cache shared:SSL:10m;
    #快取有效期
    ssl_session_timeout 60m;
 
    #省略後面與證書無關的設定
}

儲存配置, 重新載入 Nginx 配置或重啟.
#重新載入配置
systemctl reload nginx
#或重啟nginx
systemctl restart nginx

到這步, Nginx 的 SSL 證書就配置完成了, 開啟瀏覽器訪問網站就會啟用 https, 看到綠色安全鎖的圖示.

規範頁面中的連結

如果你發現瀏覽器中的安全鎖上帶有歎號, 說明頁面中引用到了非 https 的連結, 你可能要花上一點時間來修改這些連結, 如果是本站資源, 可以使用相對地址, 如果是外部資源, 要先看外部資源是否支援 https, 如果支援改為 https 地址即可,如果不支援則要想辦法替換為 https 資源或將資源儲存到本地並使用相對地址.



相關推薦

CentOS 7 Nginx Lets Encrypt SSL 證書安裝配置

https取代http是大勢所趨,越來越多的網站都改用https了。從16年起,蘋果公司就要求開發者使用https替代http,前期還可以通過調整應用的配置允許http通訊,到後來使用https成了強制要求。 對於個人開發者和小公司而言,很多時候不過是在伺服器進行一些簡單的

解決 Lets Encrypt SSL 證書配置錯誤

apt work 更新 pass 問題: rest 原因 ubuntu pos 解決 Let’s Encrypt SSL 證書配置錯誤”DNS problem: NXDOMAIN looking up A for xxx.com” 一、問題:Let’s Encrypt 配置

CentOS下使用Let's Encrypt獲取證書

在CentOS下使用Let’s Encrypt獲取證書 環境 -CentOS 6.5 -Apache Tomcat 7.0.81 -Apache httpd 2.2.15 -Python 2.6.6 步驟 1.從Certbot中獲取

NGINX + Let's encrypt免費SSL證書

安裝與配置過程不算複雜:1、安裝openssl和certbotsudo apt-get install openssl ssl-cert sudo apt-get install python-certbot-nginx -t stretch-backports2、生成DH引

使用 Cerbot 部署 Let's Encrypt免費證書 簡單 升級 http 到 https 申請單域名ssl證書

升級環境是centos 7  伺服器apache  伺服器應具有的環境先執行 yum -y install yum-utils yum-config-manager --enable rhui-R

Let's Encrypt SSL證書申請

當前環境: * 阿里雲CoreOS * 所繫結的域名,解析管理也在阿里這兒,在該文件中使用 `example.com` 作為示例。 * Docker 映象 `neilpang/acme.sh:2.8.8` https://github.com/acmesh-official/acme.sh * ngi

阿里雲Linux CentOS 7.3 64位 Apache SSL證書部署全過程記錄

      因為參加比賽的需要,所以申請了一個阿里的伺服器,系統的話是Linux CentOS 7.3 64位,之後就開始了我的填坑之旅。      我購買的是學生版的優惠ECS,9.9元一個月,同時為了配備最新的環境和鍛鍊自己的能力,決定不使用映象和預安裝,只是安裝了一個C

配置新版 Lets Encrypt (Certbot) 證書

前言 在上個月 (2016年05月) Let’s Encrypt 證書工具升級改名了,現在的名稱為Certbot 由於我將近一個月沒有維護我的伺服器,結果發生舊版客戶端證書失效的事情… 正好最近有時間,重灌一次伺服器順道重新寫一些配置流程

<親測>CentOS 7.3下Node.js 8.6安裝配置(含NPM以及PM2)

命令 mod profile 添加 data- x64 dsm 解壓 .net CentOS 7.3下Node.js 8.6安裝配置 2017年09月30日 14:12:02 閱讀數:2245更多 個人分類: Nodejs

centOS7 apache ssl證書安裝配置

背景說明:伺服器是centOS7.4 七牛申請的免費ssl證書預設apache是沒有安裝SSL模組的,所以需要安裝,接著使用命令:yum install -y mod_sslapache目錄 /u

CentOS 7配置Lets Encrypt支持免費泛域名證書

證書 token rep -h clas oot serve 執行 details Let’s Encrypt從2018年開始支持泛域名證書,有效期3個月,目前僅支持acme方式申請,暫不支持certbot。 1、安裝acme.sh curl https://get.ac

如何在CentOS 7上使用Let's Encrypt加密Nginx

如何在CentOS 7上使用Let`s Encrypt加密Nginx Let's Encrypt是由Internet Security Research Group(ISRG)開發的免費開放證書頒發機構。 今天幾乎所有瀏覽器都信任Let's Encrypt頒發的證書。 在本教程中,我們將

免費SSL證書Lets Encrypt申請與部署(Windows Nginx)

我著著皇帝的新衣,但是你看不見      有一顆願意等待的心,說明你對未來充滿希望。有一顆充滿希望的心,那麼等待又算什麼。人就是在等待與希望中度過,我們永遠要對未來充滿信心! 讀在最前面: 1、本文案例為SSL證書申請,部署環境為Winodws Nginx    2、Let's Encrypt是國外一

centos安裝 Lets Encrypt 永久免費 SSL 證書

d引數後面對應的是域名,在執行的過程中,我遭遇了下面的報錯: Total size: 44 M Downloading Packages: Running rpm_check_debug ERROR with rpm_check_debug vs depsolve: libgdbm.so.2()(64b

HawkHost主機cPanel面板快速安裝Lets Encrypt免費SSL證書

HawkHost主機 老鷹主機 虛擬主機 如今我們越來越多的網站需要使用到SSL安全證書,尤其是我們做電商業務的網站,一來可以確保用戶信息的安全,二來可以增加用戶的安全意識識別,三來外貿類網站一般在谷歌中的排名優勢如果有SSL證書還是有一定的加分的。如果我們有使用HawkHost老鷹主機虛擬

一年多 Lets EncryptSSL 證書使用有感

一年多 Let’s Encrypt 的 SSL 證書使用有感 https://www.zhihu.com/search?type=content&q=Let's Encrypt 明月登樓 草根部落格站長 imydl.com 擅長伺服器部署、運維、網站建設等 又拍雲 等 話說我把站

申請Let's Encrypt永久免費SSL證書過程教程及常見問題,及續期

近幾年,在瀏覽器廠商的強力推動下,HTTPS的使用率大增。據統計,Firefox載入的網頁中啟用HTTPS的佔比為67%,谷歌搜尋結果中HTTPS站點佔比已達50%,HTTPS網站已獲得瀏覽器和搜尋引擎的共同青睞。據悉,瀏覽器開發商Mozilla,Google準備採取下一步措

Lets Encrypt的免費SSL證書(續簽)

oxo1 簡介 Let’s Encrypt是一個免費、自動化、開放的證書頒發機構,該專案得到了Mozilla基金會,Akamai以及思科等很多大型機構的支援。Let’s Encrypt釋出的免費SSL證書能被許多瀏覽器信任,雖然申請的SSL/TLS證書只有3個

Let's Encrypt免費SSL證書的申請及使用-Windows-Tomcat版

執行環境:      作業系統: windows server 2012 R2      JAVA: jdk1.7.0_17      Tomcat: Tomcat 7 筆者使用的是一臺 windows 測試機,上面單獨執行的 Tomcat  並且已完成域名解析。

申請Let's Encrypt永久免費SSL證書教程及常見問題

1:安裝Let's Encrypt指令碼依賴環境:(這一部分可以跳過,因為官方提供的Let's Encrypt指令碼會自動檢測並安裝,但是最好不要!) ——————# Debian apt-get i