【问题标题】:OpenSSL crypto error: [('PEM routines', 'PEM_read_bio', 'no start line')]OpenSSL 加密错误:[('PEM routines', 'PEM_read_bio', 'no start line')]
【发布时间】:2016-09-04 09:19:54
【问题描述】:

我在尝试读取证书时收到以下错误:

OpenSSL.crypto.Error: [('PEM routines', 'PEM_read_bio', 'no start line')]

在运行OpenSSL.crypto.load_certificate(FILETYPE_PEM, filename) 时。我进行了一些研究,但无法找到特定于我的案例的答案。

我尝试使用返回Trueos.path.isfile(filename) 检查文件是否存在,但加载证书只会引发上述错误。

另外,当在终端 openssl X509 -in file.pem 上执行时,它就像一个魅力。

file.pem 如下所示:

-----BEGIN CERTIFICATE-----
<<sensitive data>>
-----END CERTIFICATE-----

这似乎是有效的,因为我能够在终端上执行基本的openssl 操作。我正在运行 CentOS 7,如果有帮助的话。

有什么想法吗?

谢谢!

【问题讨论】:

  • 您的 PEM 文件是否在 base64 部分之前包含 ` -----BEGIN CERTIFICATE-----` 或 ` -----BEGIN X509 CERTIFICATE-----` 行?
  • 也许您可以分享您的 PEM 内容 - 如果 PEM 敏感,请删除除 base64 第一行以外的所有内容
  • 是的,PEM 确实包含所有开始/结束证书行,我会将其添加到我的帖子中

标签: python openssl certificate


【解决方案1】:

根据http://www.pyopenssl.org/en/stable/api/crypto.html#OpenSSL.crypto.load_certificate,load_certificate() 需要一个包含证书的缓冲区(字符串可以),而不是文件名。

你需要做的:

with open(filename, "r") as my_cert_file:
    my_cert_text = my_cert_file.read()
    cert = load_certificate(FILETYPE_PEM, my_cert_text)

【讨论】:

  • 非常感谢您的帮助!但我有一个简单的问题,“r”是什么意思?
  • @TheDrummerfromKubuntu r 是一种打开文件进行读取的操作方式。
猜你喜欢
  • 2014-04-30
  • 1970-01-01
  • 2022-11-13
  • 2020-09-22
  • 1970-01-01
  • 1970-01-01
  • 2017-02-18
  • 2017-02-24
  • 2023-03-28
相关资源
最近更新 更多