使用win32crypt保存证书至本地计算机存储时遇权限拒绝问题
问题:写入Windows本地计算机根证书存储时遭遇权限拒绝错误
我有一个生成自签名证书的Python程序,需要添加将证书保存至Windows「本地计算机」存储下的「受信任的根证书颁发机构」文件夹的功能。该功能在保存至「当前用户」证书存储时可正常运行,但写入本地计算机存储时,出现权限拒绝错误:
(-2147024891, 'PyCERTSTORE::CertAddEncodedCertificateToStore', 'Access is denied.')
相关实现代码
CERT_STORE_PROV_SYSTEM = 0x0000000A CERT_STORE_OPEN_EXISTING_FLAG = 0x00004000 CERT_STORE_MAXIMUM_ALLOWED_FLAG = 0x00001000 CRYPT_STRING_BASE64HEADER = 0x00000000 CERT_SYSTEM_STORE_CURRENT_USER_ACCOUNT = 0x00010000 CERT_SYSTEM_STORE_LOCAL_MACHINE = 0x00020000 X509_ASN_ENCODING = 0x00000001 CERT_STORE_ADD_REPLACE_EXISTING = 3 CERT_CLOSE_STORE_FORCE_FLAG = 0x00000001 def save_cert_to_store(cert_to_save: str) -> None: cert_byte = win32crypt.CryptStringToBinary( cert_to_save, CRYPT_STRING_BASE64HEADER )[0] store = win32crypt.CertOpenStore( CERT_STORE_PROV_SYSTEM, 0, None, CERT_SYSTEM_STORE_LOCAL_MACHINE | CERT_STORE_MAXIMUM_ALLOWED_FLAG, "Root" ) try: store.CertAddEncodedCertificateToStore( X509_ASN_ENCODING, cert_byte, CERT_STORE_ADD_REPLACE_EXISTING ) except Exception as e: print(e) finally: store.CertCloseStore(CERT_CLOSE_STORE_FORCE_FLAG)
排查过程
我曾怀疑问题出在CERT_SYSTEM_STORE_LOCAL_MACHINE | CERT_STORE_MAXIMUM_ALLOWED_FLAG这一行的参数组合上,尝试过不同参数组合但结果一致。查阅相关社区帖子及微软文档后,仍未找到写入本地计算机证书存储的解决方案,也曾怀疑该操作被Windows阻止。
已解决方案
只需以管理员权限运行PyCharm及生成的可执行文件即可。
内容的提问来源于stack exchange,提问作者StrangerDanger
相关产品推荐
相关产品推荐

