使用pythonanywhere的自定义域名时的https的记录

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36264495/article/details/82666309

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

猜你喜欢

转载自blog.csdn.net/qq_36264495/article/details/82666309