首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用python将证书安装到受信任的根证书?

如何使用python将证书安装到受信任的根证书?
EN

Stack Overflow用户
提问于 2020-05-19 10:07:21
回答 1查看 1.1K关注 0票数 1

我需要编写一个python代码,将证书安装到我的机器(windows)或本地用户的受信任根证书中。我试过下面的代码。代码运行时没有错误,但看起来存储区不是windows受信任的根目录。我还阅读了wincertwin32crypt python模块的文档,似乎什么也做不了。

代码语言:javascript
复制
import OpenSSL.crypto

cert = OpenSSL.crypto.load_certificate(
    OpenSSL.crypto.FILETYPE_PEM, 
    open('certFile.crt').read()
)

store = OpenSSL.crypto.X509Store()
if not store.add_cert(cert):
    print('Success')

编辑:我需要做一些类似提到的here,但是使用python。

编辑2:我还尝试了以下方法(不确定它是否能完成预期的工作):

代码语言:javascript
复制
import win32crypt
import sys

CERT_STORE_PROV_SYSTEM = 0x0000000A
CERT_STORE_OPEN_EXISTING_FLAG = 0x00004000
CRYPT_STRING_BASE64HEADER = 0x00000000

def main():

    store = win32crypt.CertOpenStore(CERT_STORE_PROV_SYSTEM, 0, None, CERT_SYSTEM_STORE_LOCAL_MACHINE|CERT_STORE_OPEN_EXISTING_FLAG, "ROOT")
    cert_str = open('D:\\Certificates\\certFile.crt').read()
    cert_byte = win32crypt.CryptStringToBinary(cert_str, CRYPT_STRING_BASE64HEADER)[0]
    win32crypt.CertAddSerializedElementToStore(store,cert_byte,1,2,0)

if __name__ == "__main__":

    main()
    print('done')

但我得到了以下错误:

代码语言:javascript
复制
win32crypt.CertAddSerializedElementToStore(store,cert_byte,1,2,0)
pywintypes.error: (-2146885629, 'CertAddSerializedElementToStore', 'An error occurred while reading or writing to a file.')
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-11 11:26:41

这段代码对我有用。把它贴在这里以防万一对别人有帮助。

代码语言:javascript
复制
#Flag variables
CERT_STORE_PROV_SYSTEM = 0x0000000A
CERT_STORE_OPEN_EXISTING_FLAG = 0x00004000
CRYPT_STRING_BASE64HEADER = 0x00000000
CERT_SYSTEM_STORE_CURRENT_USER_ACCOUNT = 1<<16
X509_ASN_ENCODING = 0x00000001
CERT_STORE_ADD_REPLACE_EXISTING = 3
CERT_CLOSE_STORE_FORCE_FLAG = 0x00000001

#replace with your certificate file path
crtPath = "D:\\certificates\\cert_file.crt"

with open(crtPath,'r') as f:
        cert_str = f.read()

cert_byte = win32crypt.CryptStringToBinary(cert_str, CRYPT_STRING_BASE64HEADER)[0]
store = win32crypt.CertOpenStore(CERT_STORE_PROV_SYSTEM, 0, None, CERT_SYSTEM_STORE_CURRENT_USER_ACCOUNT|CERT_STORE_OPEN_EXISTING_FLAG, "ROOT")
    
try:
   store.CertAddEncodedCertificateToStore(X509_ASN_ENCODING, cert_byte, CERT_STORE_ADD_REPLACE_EXISTING)
finally:
    store.CertCloseStore(CERT_CLOSE_STORE_FORCE_FLAG)

win32crypt模块可与pywin32库一起使用。您可以通过运行以下命令来安装它。

pip安装pywin32

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61888404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档