无法让 TLS1.2 在 Mac OS 上工作

Unable to get TLS1.2 working on Mac OS

1) 我是 运行 Google Mac OS X El Capitan 上的 App Engine SDK。我有 Python 2.7.13

2) 在尝试使用 Stripe 测试我的应用程序时,出现以下错误

请求req_ApPsfecKnLFJxb:Stripe 不再支持使用 TLS 1.0 发出的 API 请求。请使用 TLS 1.2 或更高版本启动 HTTPS 连接。您可以在 https://stripe.com/blog/upgrading-tls 了解更多相关信息。

3) 我进行了一些谷歌搜索,根据我的发现,我执行了以下操作

a) 使用 brew 升级我的 OpenSSL

b) 确认当我执行 'which openssl' 时,我得到

/usr/local/opt/openssl/bin/openssl

当我这样做时 'openssl version',我得到

OpenSSL 1.0.2l

c) 如果我这样做

导入 ssl

ssl.OPENSSL_VERSION,我得到

'OpenSSL 1.0.2l 23 May 2017'

但我仍然从 Stripe 收到有关未使用 TLS 1.2 的错误消息。

我发现了这个 but it didn't solve my problem. I also found thisGoogle Group Discussion 并且在 运行 #5 中的步骤之后,它显示应用引擎仍然指向旧版本的 OPENSSL 因为输出显示 'OpenSSL 0.9.8zh 14 Jan 2016'

我该如何解决这个问题?如何让 python 或 App Engine 使用我安装的较新版本的 OpenSSL?

确保升级到最新版本的 App Engine SDK。另外,将此添加到您的 app.yaml:

libraries:
- name: ssl
  version: '2.7.11'

我想通了,我的理解是

1) GAE 仍然指的是旧的 python 安装(Mac 附带的安装)。当我打开 GAE 启动器时, GAE > 首选项 > Python 路径为空。

2) 我需要做的是强制 GAE 使用新安装的 Python(我用 Brew 安装的那个,指示使用升级的 OpenSSL)。所以我现在设置 GAE > 首选项 > Python 路径 = /usr/local/bin/python.

现在一切正常,运行下面来自 GAE 的代码告诉我我的 TLS 正常

import urllib2
r = urllib2.urlopen("https://howsmyssl.com/").read()
return r

此外 运行 下面的代码现在为我提供了 OpenSSL 的更新版本

import ssl 
return ssl.OPENSSL_VERSION