You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 06:16:13