使用pythonanywhere的自定義域名時的https的記錄
使用pythonanywhere的自定義域名時的https的記錄
我們的加密為HTTPS提供免費的SSL證書。在PythonAnywhere上獲取Let’s Encrypt證書很容易。就是這樣:
提示:yourusername.pythonanywhere.com上的免費網站已經擁有HTTPS,您不需要自己的證書。
自定義域名時,請往下看:
確保您已啟用PythonAnywhere API
這樣做的第一步是確保為您的帳戶設定了API token; 轉到“帳戶”頁面,然後單擊“API token”選項卡。如果你看到這個:
…然後你們都準備好了。但是,如果你看到這個:
未設定API令牌
…然後你需要點選那個按鈕來生成一個鍵。
安裝PythonAnywhere幫助程式指令碼
啟動一個新的 Bash控制檯(舊的控制檯沒有API訪問許可權)並執行此命令來安裝PythonAnywhere幫助程式指令碼:
pip3.6 install –user –upgrade pythonanywhere
(如果沒有可用的Python 3.6,則可以使用pip3.5代替。)
安裝dehydrated
我們使用名為“dehydrated”的包來獲取我們的Let’s Encrypt證書。要安裝它,請在Bash控制檯中執行以下命令:
git clone https://github.com/lukas2511/dehydrated.git ~/dehydrated
現在我們需要一些目錄來儲存我們的金鑰,證書和相關檔案:
mkdir -p ~/letsencrypt/wellknown
cd ~/letsencrypt
(不要忘記cd命令 –如果你這樣做,你將會遇到問題。)
設定靜態檔案對映
您需要PythonAnywhere站點才能從wellknown剛建立的目錄中提供靜態檔案。轉到Web應用程式選項卡並設定新對映(將“YOURUSERNAME”替換為您的實際使用者名稱):
靜態網址: /.well-known/acme-challenge
靜態路徑: /home/YOURUSERNAME/letsencrypt/wellknown
比如我的如下所示(在第二列中使用不同的使用者名稱):
如果您正在為您的網路應用程式使用我們的密碼保護功能,您還需要在此過程中關閉它; 獲得證書後,您可以再次開啟它。接下來,使用頁面頂部的按鈕重新載入您的Web應用程式。
配置dehydrated
現在我們需要建立一個簡單的配置檔案。返回Bash控制檯,並像這樣建立它(用您的實際使用者名稱替換“YOURUSERNAME”):
echo WELLKNOWN=/home/YOURUSERNAME/letsencrypt/wellknown > ~/letsencrypt/config
接下來,如果這是您第一次從PythonAnywhere建立Let的加密證書,則需要通過執行以下命令註冊它們:
~/dehydrated/dehydrated --register --accept-terms
生成證書
現在我們需要實際申請證書(將“www.yourdomain.com”替換為您在“Web”頁面上指定的網站的實際主機名):
~/dehydrated/dehydrated --config ~/letsencrypt/config --cron --domain www.yourdomain.com --out ~/letsencrypt --challenge http-01
如果你收到類似這樣的警告:
To use dehydrated with this certificate authority you have to agree to their
terms of service which you can find here: https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf
To accept these terms of service run `/home/username/dehydrated/dehydrated --register --accept-terms`.
要使用此證書頒發機構dehydrated,您必須同意他們
的服務條款,您可以在此處找到:https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf
接受這些服務條款執行/home/username/dehydrated/dehydrated --register --accept-terms
。
…那麼可能是因為你沒有註冊 - 你需要執行上面命令的版本(使用“–register”和“–accept-terms”標誌),然後執行dehydrated 命令再次申請證書。
如何您遇到如下問題:
Creating well known challenge directory...
Installing LetsEncrypt client...
Cloning into 'letsencrypt111111'...
Configuring client...
Restarting Nginx...
Generating Certificate...
# INFO: Using main config file /root/letsencrypt1111111/config
+ Generating account key...
+ Registering account key with ACME server...
Processing mydomain.com with alternative names: www.mydomain.com
+ Signing domains...
+ Creating new directory /root/letsencrypt11111111/certs/mydomain.com ...
+ Generating private key...
+ Generating signing request...
+ Requesting challenge for mydomain.com...
+ Requesting challenge for mydomain.com...
+ Responding to challenge for mydomain.com...
ERROR: Challenge is invalid! (returned: invalid) (result: {
"type": "http-01",
"status": "invalid",
"error": {
"type": "urn:acme:error:unauthorized",
"detail": "Invalid response from http://mydomain.com/.well-known/acme-challenge/g111111111111111111111: \"\u003c!DOCTYPE html\u003e\u003cbody style=\"padding:0; margin:0;\"\u003e\u003chtml\u003e\u003cbody\u003e\u003ciframe src=\"http://mcc.godaddy.com/park/pJIbqUy2M2qlMF52LKAv\" sty\"",
"status": 403
},
"uri": "https://acme-v01.api.letsencrypt.org/acme/challenge/k22222222222222222222222/315265030",
"token": "33333333333333333333333",
"keyAuthorization": "44444444444444444444444444",
"validationRecord": [
{
"url": "http://mydomain.com/.well-known/acme-challenge/55555555555555555555",
"hostname": "mydomain.com",
"port": "80",
"addressesResolved": [
"godaddy IP",
"forge IP"
],
"addressUsed": "godaddy IP"
}
]
})
這要在域名解析出設定,我的如下:
如果成功,您將看到如下內容:
# INFO: Using main config file /home/YOURUSERNAME/letsencrypt/config
# Processing www.yourdomain.com
# + Checking domain name(s) of existing cert... unchanged.
# + Checking expire date of existing cert...
# + Valid till Nov 3 13:48:00 2016 GMT (Less than 30 days). Renewing!
# + Signing domains...
# + Generating private key...
# + Generating signing request...
# + Requesting challenge for www.yourdomain.com...
# + Responding to challenge for www.yourdomain.com...
# + Challenge is valid!
# + Requesting certificate...
# + Checking certificate...
# + Done!
# + Creating fullchain.pem...
# + Done!
您現在將在目錄www.yourdomain.com中找到一個目錄,letsencrypt並且您的證書和金鑰將在那裡。
保持/home/YOURUSERNAME/letsencrypt目錄安全。它包含您續訂證書所需的資訊。
安裝證書
要安裝證書,只需執行以下PythonAnywhere幫助程式指令碼(將www.yourdomain.com替換為您的實際域名):
pa_install_webapp_letsencrypt_ssl.py www.yourdomain.com
它應該打印出這樣的東西:
< Setting up SSL for www.yourdomain.com via API >
\
~<:>>>>>>>>>
< Reloading www.yourdomain.com via API >
\
~<:>>>>>>>>>
_________________________________________________________________
/ \
| That's all set up now :-) Your new certificate will expire |
| on 12 November 2018, so shortly before then you should |
| renew it (see https://help.pythonanywhere.com/pages/LetsEncrypt/) |
| and install the new certificate. |
\ /
-----------------------------------------------------------------
\
~<:>>>>>>>>>
但是,當您的證書過期時(您可以看到指令碼告訴您何時會發生),您需要續訂它。
證書續訂
要更新您的證書,假設你留在原地靜態檔案對映和仍然有你letsencrypt和letsencrypt.sh目錄,你只需要重新執行:
cd ~/letsencrypt
~/dehydrated/dehydrated --cron --domain www.yourdomain.com --out . --challenge http-01
pa_install_webapp_letsencrypt_ssl.py www.yourdomain.com
檢查到期日期
你的證書何時到期忘了?
假設您的檔案位於預設目錄中,則可以執行以下命令:
openssl x509 -enddate -noout -in ~/letsencrypt/www.yourdomain.com/cert.pem
如果你有多個域,你可以像這樣建立一個bash指令碼:
echo www.domain1.com expires $(openssl x509 -enddate -noout -in ~/letsencrypt/www.domain1.com/cert.pem)
echo www.domain2.com expires $(openssl x509 -enddate -noout -in ~/letsencrypt/www.domain2.com/cert.pem)
echo www.domain3.com expires $(openssl x509 -enddate -noout -in ~/letsencrypt/www.domain3.com/cert.pem)
你可以執行 bash check_expirations.sh