python从pem文件获取证书 私钥生产.crt .key,.ca
时间: 2023-12-29 12:06:22 浏览: 281
可以使用openssl库来从pem文件中获取证书、私钥和ca证书。以下是示例代码:
```python
import OpenSSL.crypto as crypto
# 从pem文件中获取证书
with open('cert.pem', 'r') as f:
cert = f.read().encode()
cert_obj = crypto.load_certificate(crypto.FILETYPE_PEM, cert)
# 从pem文件中获取私钥
with open('key.pem', 'r') as f:
key = f.read().encode()
key_obj = crypto.load_privatekey(crypto.FILETYPE_PEM, key)
# 从pem文件中获取ca证书
with open('ca.pem', 'r') as f:
ca = f.read().encode()
ca_obj = crypto.load_certificate(crypto.FILETYPE_PEM, ca)
```
其中,`cert.pem`是证书文件,`key.pem`是私钥文件,`ca.pem`是ca证书文件。执行上述代码后,`cert_obj`、`key_obj`和`ca_obj`分别是证书、私钥和ca证书的对象。可以通过这些对象来执行一些操作,比如验证证书、签名和加密等。
相关问题
正确的做法应该是将ssl_verify设为True来开启验证,如果想要提供一个文件,应该是一个PEM格式的证书文件或者证书链文件(.pem, .crt, 或者.cer)。如果是验证目录,应指定一个包含了CA根证书的目录。
确实,当涉及到网络请求,特别是HTTPS通信时,启用SSL验证是非常重要的。将`ssl_verify`设置为`True`会使requests库在连接到服务器时强制检查其SSL证书,确保数据传输的安全性。
如果你想提供一个文件,通常会传递一个PEM格式的证书(`.pem`),它可以是服务器的公共证书或者一个包含了多个证书(包括私钥和CA根证书)的证书链文件(`.crt` 或 `.cer`)。这些文件允许客户端验证服务器的身份。
对于验证目录,你需要指定一个包含常见认证机构(Certification Authorities, CA)根证书的目录。这种方式允许系统自动查找并加载CA颁发的所有证书,增加了验证的可靠性。
在Python的requests库中,例如:
```python
import requests
# 使用PEM文件
response = requests.get('https://example.com', cert=('path_to_your_cert.pem', 'path_to_your_key.pem'), verify=True)
# 或者验证目录
response = requests.get('https://example.com', verify='/path/to/ca_certs_directory')
```
用python从pfx中提取相关信息生产key,crt,cert,ca文件
您可以使用 Python 的 pyOpenSSL 模块来从 pfx 文件中提取相关信息并生成 key、crt、cert 和 ca 文件,具体代码如下:
```python
from OpenSSL import crypto
# 读取 pfx 文件
with open("yourdomain.pfx", "rb") as f:
pfx = f.read()
# 解析 pfx 文件
p12 = crypto.load_pkcs12(pfx, "password")
# 生成私钥 key 文件
key = p12.get_privatekey()
with open("yourdomain.key", "wb") as f:
f.write(crypto.dump_privatekey(crypto.FILETYPE_PEM, key))
# 生成证书 crt 文件
cert = p12.get_certificate()
with open("yourdomain.crt", "wb") as f:
f.write(crypto.dump_certificate(crypto.FILETYPE_PEM, cert))
# 生成证书链文件 ca.crt
ca_cert = p12.get_ca_certificates()
if ca_cert:
with open("ca.crt", "wb") as f:
for cert in ca_cert:
f.write(crypto.dump_certificate(crypto.FILETYPE_PEM, cert))
# 生成证书文件 cert.pem
with open("cert.pem", "wb") as f:
f.write(crypto.dump_certificate(crypto.FILETYPE_PEM, cert))
if ca_cert:
for cert in ca_cert:
f.write(crypto.dump_certificate(crypto.FILETYPE_PEM, cert))
# 生成证书链文件 chain.pem
if ca_cert:
with open("chain.pem", "wb") as f:
for cert in ca_cert:
f.write(crypto.dump_certificate(crypto.FILETYPE_PEM, cert))
```
这段代码会生成 yourdomain.key、yourdomain.crt、ca.crt、cert.pem 和 chain.pem 五个文件,其中 yourdomain.key 为私钥文件,yourdomain.crt 为证书文件,ca.crt 为证书链文件,cert.pem 为证书和证书链的组合文件,chain.pem 为证书链文件。
阅读全文