python 脚本使用 Urllib3,我的服务器是在 Node.js 上编写的脚本。 我担心(并且不清楚)证书:我是否需要将我的 python 应用程序上的证书另存为变量?
例如我这样做了,
http = urllib3.PoolManager(
cert_reqs="CERT_REQUIRED",
ca_certs='client-cert.pem')
并且我不知道这是否是正确的方法,就像它是安全的方法一样,或者如果黑客拿到了证书也没关系?
我成功地用 Node.js 设置了 python 应用程序,正如我所解释的那样,我期待黑客无法获取应用程序和服务器发送和接收的数据。
以下是处理 Python 应用程序与 HTTPS 服务器进行通信的证书时的一些注意事项,重点关注安全性:
1. 不要将证书硬编码到你的应用程序中。
- 安全性风险: 将证书硬编码到你的脚本中会带来巨大的安全风险。任何访问你代码的人都可以提取证书,这会危及你的服务器和客户端之间的通信。
-
解决方案:
- 使用受信任的证书颁发机构 (CA): 让你的服务器使用 Let's Encrypt 等知名 CA 签发的证书。这使你的 Python 应用程序可以自动验证服务器证书,而无需任何嵌入式证书。
-
如果使用自签名证书:
- 安全存储: 将证书存储在应用程序环境之外的安全位置(例如,环境变量、密钥库)。
- 在代码中加载路径: 在你的代码中引用证书的路径,而不是证书本身。
2. 正确验证证书。
- 重要性: 证书验证可确保你的 Python 应用程序正在与预期服务器通信,而不是恶意服务器。
-
urllib3
中的默认值: 默认情况下,urllib3
不会自动验证证书。这是 不安全的 。 -
启用验证:
始终使用
cert_reqs='CERT_REQUIRED'
或cert_reqs='CERT_NONE'
来启用验证。 -
受信任的 CA 包:
确保你的系统具有最新的受信任根 CA 证书包。这允许
urllib3
验证服务器证书链。
3. 安全处理证书存储。
- 避免直接嵌入: 正如前面提到的,不要将证书直接嵌入到你的代码中。
- 环境变量: 一种选择是将证书路径存储为环境变量。
- 密钥库: 对于更强大的解决方案,请考虑使用 HashiCorp Vault 或 AWS Secrets Manager 等密钥库。
改进后的代码示例(使用环境变量):
import os
import urllib3
# 从环境变量加载证书路径(不要硬编码)
CERT_PATH = os.environ.get("CLIENT_CERT_PATH")
http = urllib3.PoolManager(
cert_reqs="CERT_REQUIRED", # 始终启用验证
ca_certs=CERT_PATH # 从安全位置加载证书路径
)
其他安全最佳实践:
-
保持你的库更新:
定期更新
urllib3
和你的 Python 环境,以包含最新的安全补丁。 - 最低权限原则: 你的 Python 应用程序应仅具有访问其所需资源的权限。
- 安全编码实践: 遵循安全编码实践,以防止 SQL 注入和跨站点脚本 (XSS) 等漏洞。
请记住,安全性是一个持续的过程。 通过实施强大的安全措施并及时了解最新的安全最佳实践,保护你的应用程序和数据至关重要。
标签:python,node.js,server,https,urllib3 From: 78802343