Python 在M2Crypto中访问CSR扩展堆栈

Python 在M2Crypto中访问CSR扩展堆栈,python,openssl,m2crypto,Python,Openssl,M2crypto,我有一个添加了扩展堆栈的证书签名请求。在基于此请求构建证书时,我希望能够访问该堆栈以用于创建最终证书 但是,尽管M2Crypto.X509.X509有许多用于访问扩展的帮助程序(get_ext,get_ext_at等等),M2Crypto.X509.Request似乎只提供用于添加扩展的成员,但无法检查已与给定对象关联的扩展 我是不是遗漏了什么?你说得对 当前版本的M2Crypto没有公开必要的OpenSSL接口-X509\u REQ\u get\u扩展名 只是想让我们了解一下C的含义: X50

我有一个添加了扩展堆栈的证书签名请求。在基于此请求构建证书时,我希望能够访问该堆栈以用于创建最终证书

但是,尽管
M2Crypto.X509.X509
有许多用于访问扩展的帮助程序(
get_ext
get_ext_at
等等),
M2Crypto.X509.Request
似乎只提供用于添加扩展的成员,但无法检查已与给定对象关联的扩展

我是不是遗漏了什么?你说得对

当前版本的M2Crypto没有公开必要的OpenSSL接口-
X509\u REQ\u get\u扩展名

只是想让我们了解一下C的含义:

X509_REQ *req = /* ... */;
STACK_OF(X509_EXTENSION) *exts = X509_REQ_get_extensions(req);
int count = sk_X509_EXTENSION_num(exts);
int i;
for (i = 0; i < count; ++i) {
    X509_EXTENSION *ext = sk_X509_EXTENSION_value(exts, i);
    /* Do something with ext */
}
sk_X509_EXTENSION_pop_free(exts, X509_EXTENSION_free);
X509_-REQ*REQ=/*…*/;
堆栈(X509扩展)*exts=X509请求获取扩展(请求);
int count=sk_X509_EXTENSION_num(exts);
int i;
对于(i=0;i

由于M2Crypto使用SWIG包装C代码,如果你有良好的C背景,那么公开一个新的API应该不难。

其他人通过类似的谷歌搜索找到了这个问题,也就是我来这里的原因

面对类似的问题,而且看不到M2Crypto的这一缺陷的修补程序,我开始调用OpenSSL实用程序并解析输出,它看起来与YAML非常相似,我们可以通过一点清理来伪造它

def req_extensions(csrFilename):
    cmd = ('openssl req -text -noout -in %s'
        % csrFilename)

    output = subprocess.check_output(cmd.split(),
        stderr=subprocess.STDOUT)

    output = re.sub(r': rsaEncryption', ':', output)
    output = re.sub(r'[0-9a-f]{2}:', '', output)

    return yaml.load(output)
然后

csrExt = self.req_extensions('my.csr')
keyUsage = (
    csrExt['Certificate Request']['Data']['Requested Extensions']
          ['X509v3 Key Usage'])

SAN = (
    csrExt['Certificate Request']['Data']['Requested Extensions']
          ['X509v3 Subject Alternative Name'])

等等。

我在这里担心脆弱性——假设YAMLishness将继续出现在openssl命令行工具的未来版本中似乎有风险。我完全同意,如果有选择,我每次都会使用API。但是,由于目前还不存在该选项……很抱歉,插入了一个旧线程,但是从一个可能不受信任的源反序列化YAML是一个安全风险。最好使用
yaml.safe\u load()
。如果有人需要,此补丁将在提交时提交functionality@viraptor不幸的是,这个存储库已经不存在了。请您将补丁附加到当前的上游,我想这将是一个解决方案。@mcepl我再也没有这个的副本了。@viraptor哦,谢谢。