【发布时间】:2020-11-03 23:34:17
【问题描述】:
我们收到了 Heroku 的以下电子邮件。我们在 heroku 中有一个 django 后端,有很多来自浏览器和其他系统的请求。
正如 Heroku 所说,我们认为浏览器不会有任何问题,因为即使是旧浏览器也与 TLS 1.2 兼容:https://caniuse.com/tls1-2
但是,我们不知道其他系统是否正在使用 TLS 1.0 或 TLS 1.1 与我们的系统连接。
我们可以从我们的代码中检测到它吗?像这样?
if request.getProtocolTLS() in ["TLS1.0", "TLS1.1"]:
send_admin_mail('Alert old protocol of TLS', request.user, request.get_full_path())
更新我们应用的真实数据:
-
云:Heroku
-
框架:Django 1.11.11
-
Python 版本:3.6
-
WSGI HTTP 服务器:gunicorn
-
过程文件:
web: python manage.py collectstatic --noinput ; gunicorn joinupback.wsgi --log-file - --max-requests 6700 --max-requests-jitter 20
尊敬的 Heroku 客户,
在 Salesforce,我们的首要任务是为您提供值得信赖的 Heroku 平台,今天我们开始迁移旧的、安全性较低的 TLS 版本,并计划在明年 7 月之后完全阻止 TLS v1.0/v1.1 2021 年 3 月 31 日。虽然此限制对于 Web 浏览器客户端通常不是问题,但一些旧的非浏览器客户端可能会受到影响。此通知给您一整年的时间来进行必要的更改,以确保所有客户端都使用 TLS v1.2 或更高版本 (v1.2+)。
Heroku 目前在所有应用程序上都支持 TLS v1.0/v1.1,以及最新、更安全的 TLS v1.2+ 协议。 2016 年 4 月,PCI 委员会发布了其数据安全标准 (DSS) 的 3.1 版。在众多更改和建议中,不能再使用 SSL 和 TLS v1.0。今天的建议是使用 TLS v1.2+,不仅是为了符合 PCI 标准,而且是对互联网上传输的数据进行加密的一般最佳实践。
今天,Heroku 开始实施这些建议,将所有应用转换到 TLS v1.2+,以便我们可以在明年终止 TLS v1.0/v1.1。
我需要做什么? 您无需执行任何操作即可使此更改生效。一切都会自动发生,无需您采取任何行动。但是,如果有客户端使用 TLS v1.0/1.1 访问您的应用,则需要在 2021 年 7 月 31 日之前对其进行更新。
我需要知道什么? 我们最近更改了私有空间中部署的所有新 Heroku 应用程序使用的密码,以仅支持 TLS v1.2+。已在私有空间中运行的现有应用程序保持不变,使用以前的默认密码套件。
今年晚些时候,我们将对所有新 Heroku 应用的默认密码进行类似的更改。
如果您在私有空间中运行您的应用,您可能希望仅将其密码套件更改为 TLS v1.2+,以便在我们阻止 TLS v1.0/v1.1 流量时它们不会受到影响。有关如何执行此操作的详细信息,请参阅私有空间开发中心的路由文章(“SSL 安全”部分)。
当我们更改 Common Runtime 应用程序(即不在私人空间中的应用程序)的默认密码套件时,我们还将为您提供更改这些现有应用程序的密码套件的说明。
从 2021 年 6 月 1 日开始,我们将开始将所有应用迁移到新的密码套件,并阻止 TLS v1.0/v1.1 在 2021 年 7 月 31 日之前完成此迁移。
2021 年 7 月 31 日之后,使用 TLS v1.0/v1.0 访问 Heroku 应用的客户端将被阻止。请务必在此之前采取必要的步骤,以确保所有客户都可以访问您的应用。
真诚地, 赫罗库
【问题讨论】:
-
使用ssllabs.com/ssltest 并享受。
-
查看
SSLSocket.cipher()in docs.python.org/3.8/library/ssl.html 以获取信息或查看get_cipher_version()in pyopenssl.org/en/stable/api/ssl.html,具体取决于您使用的库。但是在这个阶段 1)没有必要引用所有的电子邮件和 2)你没有提供任何关于你的应用程序和执行 TLS 握手的代码部分的真实数据,因此如何更改它以达到你的检测目标TLS 版本。 -
@KlausD。谢谢!但是我们不想要 SSL 服务器测试。我们想知道每个请求的 TLS 版本。目前 heroku 适用于 TLS 1.0、1.1 和 1.2 版本,但每个版本都有什么请求?通过这种方式,我们将知道我们是否有问题。例如。另一个服务器的另一个客户端可能使用 TLS 1.0,如果我们知道的话,我们可以向该服务器维护人员提醒这个问题。
-
@PatrickMevzek 1) 请少给我一些信息。 2)请给我更多信息! :-P。我已经更新了我们应用程序的真实数据。这段代码执行 TLS 握手:我们不知道这是 heroku、gunicorn 还是 Django :-( 这是个问题!
-
@Goin 因为 Django 框架只处理应用层,我非常怀疑我们是否可以获取 TLS 版本/协议的信息。仅从 django.http.request 对象的官方文档中查看,没有一个对象具有 TLS 版本/协议详细信息的任何属性docs.djangoproject.com/en/3.0/ref/request-response 如果您想在 django 中实现它,您可能需要做一些猴子补丁-框架这是为“请求”库完成的链接stackoverflow.com/questions/55431014/…
标签: python django ssl heroku tls1.2