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