Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用OpenSSL使用subjectAltName和dirName生成自签名证书?_Python_Python 3.x_Openssl - Fatal编程技术网

Python 如何使用OpenSSL使用subjectAltName和dirName生成自签名证书?

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

我正在尝试生成一个具有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 "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).