當前位置:首頁 > 技術教程>

將網站訪問地址變成https開頭的SSL功能

發表日期:2016-10-28 15:58:49文章編輯:池州網站建設瀏覽次數:7386 標簽:    SSL,網站加密,https,Encrypt,教程

HTTPS(全稱:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全為目標的HTTP通道,簡單講是HTTP的安全版。即HTTP下加入SSL層,HTTPS的安全基礎是SSL,因此加密的詳細內容就需要SSL。

Let's Encrypt,是2016年4月12日成立的一家證書授權中心,提供免費的傳輸層安全(TLS)X.509證書,通過自動化的過程消除目前安全網站證書需要手工創建,加密,簽名,安裝以及更新的復雜性。

一直以來都覺得瀏覽器網址開頭的那把小綠鎖很別致啊,現在Let's Encrypt橫空出世提供免費證書,說明https勢在必行,那我也來動手給博客加把鎖吧,看著就安全是吧。

Let's Encrypt 的官網(地址:https://letsencrypt.org)提供的腳本看起來更加自動化一些,但我沒有親自嘗試,而是在Github上搜到了一個開源腳本acme-tiny(地址:https://github.com/diafygi/acme-tiny),用下來之后成功將博客加密完成。

file

根據acme-tiny提供的說明文檔和我自己的實施過程列出以下幾步:

克隆腳本

sudo git clone https://github.com/diafygi/acme-tiny.git 
cd acme-tiny

創建Let's Encrypt私鑰

openssl genrsa 4096 > account.key

創建CSR(Certificate Signing Request,證書簽名請求) 文件

ACME協議 (Let's Encrypt所使用的) 需要一個csr文件,用來進行證書簽名和證書更新。

將需要加密的域名加到下面的代碼中,目前一張證書最多可以加密 100 個域名:

openssl genrsa 4096 > domain.key 
openssl req -new -sha256 -key domain.key -subj "/" -reqexts SAN -config <(cat /etc/ssl/openssl.cnf <(printf "[SAN]\nsubjectAltName=DNS:yoursite.com,DNS:www.yoursite.com")) > domain.csr

注意:openssl.cnf 文件的位置可能會因為linux版本的不同而有變

證明你擁有該域名

acme-tiny腳本會生成驗證文件并寫入到你指定的目錄下,然后通過 ".well-known/acme-challenge/" 這個URL來訪問到驗證文件. 注意: Let's Encrypt 會對你的服務器做一次http請求來進行驗證,因此你需要保證80端口能夠訪問。

手動生成challenges目錄,用來存放驗證文件(路徑可以根據需要修改)

mkdir -p /var/www/challenges

配置nignx的80端口

server {
listen 80;
server_name yoursite.com www.yoursite.com;
return 301 https://yoursite.com$request_uri; # 注意進行301重定向到https,否則通過http仍能訪問你的站點
location /.well-known/acme-challenge/ {
alias /var/www/challenges/;
try_files $uri =404;
}
#...你的其他配置
}

注意:以上的301重定向,在域名驗證通過之后再打開。

Apache 則需修改 .htaccess 文件配置301重定向:

RewriteEngine On
RewriteCond %{HTTPS} offRewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

獲取簽名證書

sudo chmod +x acme_tiny.py
python acme_tiny.py --account-key ./account.key --csr ./domain.csr --acme-dir /var/www/challenges/ > ./signed.crt

安裝證書

針對nginx, 你還需要將 Let's Encrypt 的中間件證書 intermediate.pem 內容附加在簽名證書signed.crt之后:

wget -O - https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem > intermediate.pem
cat signed.crt intermediate.pem > chained.pem
server {
listen 443;
server_name yoursite.com, www.yoursite.com;
ssl on;
ssl_certificate /path/to/chained.pem;
ssl_certificate_key /path/to/domain.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA;
ssl_session_cache shared:SSL:50m;
ssl_prefer_server_ciphers on;
#...你的其他配置
}

證書自動更新定時任務

恭喜!你的網站已經使用上了HTTPS。 但Let's Encrypt 證書有效期只有90天, 所以需要定期更新。現在只需要寫一個更新腳本并把它放到定時任務中即可。

腳本內容:

#!/usr/bin/sh
python /path/to/acme_tiny.py --account-key /path/to/account.key --csr /path/to/domain.csr --acme-dir /var/www/challenges/ > /tmp/signed.crt || exit
wget -O - https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem > intermediate.pem
cat /tmp/signed.crt intermediate.pem > /path/to/chained.pem
service nginx reload

定時任務可以設置為每個月執行一次: 0 0 1 * * /path/to/renew_cert.sh 2>> /var/log/acme_tiny.log


全站導航

其他新聞

靈動標簽判斷奇數偶數實現不同的效果奇偶數

這篇文章主要為大家詳細介紹了帝國CMS靈動標簽中用if判斷第幾條附加特殊樣...

日期:2019-06-18

當前欄目下所有的標題分類并給當前標題分類高亮

<?php //判斷當前欄目是否有設置標題分類 $tr=$empire->fetch1("select tti...

日期:2019-05-26

帝國CMS錯誤報告功能啟用、防垃圾灌水、統計、增加報告分類

一、錯誤報告啟用 內容模板加 <a href="&#091;!--news.url--]e/public/repo...

日期:2018-11-24

幾何元素、大膽鋪色、雙重曝光,這些新技能你掌握了嗎?

不知不覺 2018 年的余額已經只剩下六分之一不知道大家年初定下的計劃有沒有...

日期:2018-11-01

列表頁調取副表字段befrom,writer,newstext

列表模板中要調用副表字段內容需要采用&ldquo;list.var支持程序代碼&rdquo;...

日期:2018-10-30

客戶案例

池州某信息技術服務公司網站

網站使用的是PC+移動端判斷跳轉的。主色調為藍色,突出科技主題,呈現服務宗旨...

日期:2019-06-18

池州某加工生產企業工程公司官方網站

...

日期:2019-05-26

某縣生產力促進中心官方網站

...

日期:2019-05-26

廣東中山某大型機械工程公司官方網站

這是廣東一家大型進出口機械設備制造公司,實力雄厚。網站是響應式的。客戶對...

日期:2018-11-06

帝國網站后臺登錄模板(帶動畫)

閑來無事,看到一個很漂亮的登錄模板,就順手修改成了帝國CMS7.5的后臺登錄模板...

日期:2018-11-02

下载麻将游戏四人麻将