首页 > 解决方案 > 如何在 Python 中以编程方式传递密码

问题描述

我正在使用请求库来自动化 API/微服务。我尝试在获取请求中传递 URL、证书(证书文件和密钥文件的路径)。

运行程序后,它会询问 PEM 密码。请参考下面的命令提示行。

>>> r = requests.get("https://foo.example.com/api/user/bill", cert=("client.crt", "client.key"))
Enter PEM pass phrase:
>>>

如何在程序中以编程方式传递密码以避免在程序中输入 PEM 密码的人工干预?

标签: pythonpython-2.7python-requests

解决方案


requests 库还不支持受密码保护的 PEM 文件。

一种选择是将其转换为 pkcs12 文件并使用https://pypi.org/project/requests-pkcs12/中的 requests-pkcs12 库

另一种选择是将其转换为 pkcs12 文件,然后再转换为没有密码的 PEM 文件。

您可以按如下方式转换它:

# Password protected PEM to pkcs12
openssl pkcs12 -export -out cert.p12 -in cert.pem -inkey key.pem -passin pass:supersecret -passout pass:supersecret
# pkcs12 to PEM without password
openssl pkcs12 -in cert.p12 -out cert_without_pwd.pem -nodes -password supersecret

推荐阅读