【问题标题】:Is there a python module could sign and verify data by RSA key pair from certificate store?是否有 python 模块可以通过证书存储中的 RSA 密钥对对数据进行签名和验证?
【发布时间】:2020-01-20 07:40:02
【问题描述】:

我尝试通过 C++ cryptoAPI 进行签名和验证,效果很好。 cryptoAPI 使用 Windows 上的商店(个人)中的证书来执行此操作。我可以在没有导出私钥或输入密码的情况下通过 python 做同样的事情吗?

我尝试了 pycrypto、oscrypto、wincertstore 模块,但他们做不到。

【问题讨论】:

  • cryptography.io 具有 openssl 的所有功能,并拥有一整套用于处理 x509 证书的工具。另外 1) PyCrypto 已被弃用;请改用 PyCryptoDome。 2)这个问题离题了,这就是为什么我必须投票结束这个问题。
  • @Legorooj 我找不到相关的 API 来从“我的”证书存储中请求证书来签名和验证签名。你能给我看看页面吗?为什么这个问题跑题了?
  • 嗯。刚刚发现您可以在ssl lib 中列出所有带有构建的证书; ssl.enum_certificates(store_name),其中商店名称为 CAROOTMY。我假设最后一个 - 这有帮助吗?它返回列表。您可以搜索这些然后将证书从商店中加载出来吗?
  • @Legorooj 这当然对签名部分没有帮助。请注意,签名不是证书的功能。但是,Microsoft 将存储中的私钥视为证书的一部分。这是一个愚蠢的设计错误——不幸的是,在他们指定的 API 中有很多错误。
  • @Assam 好的,这更难,但我现在能想到的唯一解决方案似乎是;编写自定义 C++ 扩展。 docs.python.org/3/extending/extending.html

标签: python cryptography x509certificate cryptoapi


【解决方案1】:

您可以使用 ctypes 与 Crypt32 dll 交互来访问它的功能。

How can I use a DLL file from Python? 提供了一个好主意,但它是用 python 2.5 编写的,因此请参阅the docs 中的教程以获取信息和参考。

【讨论】:

  • 我写了一个自定义的 c++ 扩展并且它工作。我也试过ctypes,太麻烦了……
  • ctypes 可能会令人沮丧,不是吗!
猜你喜欢
  • 2020-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-09
  • 2019-06-20
  • 1970-01-01
  • 2010-10-01
  • 2014-06-09
相关资源
最近更新 更多