Python 如何使用OpenSSL使用subjectAltName和dirName生成自签名证书?
我正在尝试生成一个具有DirName类型SubjectAltName的自签名证书。其他类型的SubjectAltName(如DNS)工作正常,但DirName不起作用。复制的代码相当简单(python 3.8.5) 我收到的例外情况如下Python 如何使用OpenSSL使用subjectAltName和dirName生成自签名证书?,python,python-3.x,openssl,Python,Python 3.x,Openssl,我正在尝试生成一个具有DirName类型SubjectAltName的自签名证书。其他类型的SubjectAltName(如DNS)工作正常,但DirName不起作用。复制的代码相当简单(python 3.8.5) 我收到的例外情况如下 Traceback (most recent call last): File "tests/createcert.py", line 16, in <module> _create_csr() File &quo
Traceback (most recent call last):
File "tests/createcert.py", line 16, in <module>
_create_csr()
File "tests/createcert.py", line 12, in _create_csr
csr.add_extensions([crypto.X509Extension(b"subjectAltName", False, fails.encode("ascii"))])
File "/usr/lib/python3/dist-packages/OpenSSL/crypto.py", line 779, in __init__
_raise_current_error()
File "/usr/lib/python3/dist-packages/OpenSSL/_util.py", line 54, in exception_from_error_queue
raise exception_type(errors)
OpenSSL.crypto.Error: [('X509 V3 routines', 'X509V3_get_section', 'operation not defined'), ('X509 V3 routines', 'do_dirname', 'section not found'), ('X509 V3 routines', 'a2i_GENERAL_NAME', 'dirname error'), ('X509 V3 routines', 'X509V3_EXT_nconf', 'error in extension')]
回溯(最近一次呼叫最后一次):
文件“tests/createcert.py”,第16行,在
_创建
文件“tests/createcert.py”,第12行,在_create_csr中
csr.add_扩展([crypto.X509Extension(b“subjectAltName”,False,failes.encode(“ascii”)]))
文件“/usr/lib/python3/dist packages/OpenSSL/crypto.py”,第779行,在__
_引发当前错误()
文件“/usr/lib/python3/dist packages/OpenSSL/_util.py”,第54行,在错误队列的异常中
引发异常类型(错误)
OpenSSL.crypto.Error:[('X509 V3例程','X509 V3_get_section','operation not defined'),('X509 V3例程','do_dirname','section not found'),('X509 V3例程','X509 V3_EXT_nconf','Error in extension')]
调用将其转换为OpenSSL的do_dirname函数(堆栈跟踪)。我假设没有以正确的方式传递该值,但我无法理解如何根据需要传递它
任何帮助都将不胜感激。您不能通过python,因为dirName引用配置数据库中的值,但pyOpenSSL不提供创建配置数据库的接口 背景:dirName引用数据库中的一个部分,该部分可能是一个配置文件。请参考x509v3_配置工具,例如(),其中可以使用配置文件:
[extensions]
subjectAltName = dirName:dir_sect
[dir_sect]
C = UK
O = My Org
OU = My Unit
CN = My Name
请注意dirName
如何简单地引用配置数据库中的不同部分
但是pyopenssl没有创建这样一个数据库的规定,所以找不到您的dirName引用——因此您会出错
注意这是一个已知的限制。Python代码本身提到缺少配置数据库:请参见代码中的注释:,第754行:
# We have no configuration database - but perhaps we should (some
# extensions may require it).
# We have no configuration database - but perhaps we should (some
# extensions may require it).