1. 程式人生 > >使用pythonanywhere的自定義域名時的https的記錄

使用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