如何使用GO检索本地机器Windows证书存储的列表



go允许您使用以下命令轻松地检索当前用户的个人Windows Cert Store hander:

store, err := syscall.CertOpenSystemStore(0, syscall.StringToUTF16Ptr("MY")) // Personal Certificates

但是,当我尝试检索本地计算机个人证书商店时,我总是会带有一个空的商店句柄,并且找不到商店的异常或错误,crypt_e_not_found。

另外,您可以使用此方法:

    store, err := syscall.CertOpenStore(
       windows.CERT_STORE_PROV_SYSTEM, 
       0,
       0,
       windows.CERT_SYSTEM_STORE_CURRENT_USER,
       uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr("MY")))) 

但是当我交换本地机器商店的值时,我开始看到上面引用的错误。

您如何使用GO成功检索Windows的本地机器证书?

您确实使用以下评论中提到的以下代码段来检索证书:

    store, err := syscall.CertOpenStore(
       windows.CERT_STORE_PROV_SYSTEM,
       0,
       0,
       windows.CERT_SYSTEM_STORE_LOCAL_MACHINE, 
       uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr("MY"))))

但是,这里有一些事情是关于为什么最初不起作用的原因:

  1. 您必须以管理员的身份运行该程序,否则商店将以0。
  2. 返回
  3. 我没有作为管理员运行与代码:我以为我是,但是您必须杀死所有实例才能这样做!
  4. 检索最后一个错误的代码似乎在GO中似乎不起作用,但是当我切换到C 工作时,我确实看到了访问被拒绝的错误。

使用CERTOPENSTORE,以及cert_system_store_local_machine,也添加cert_store_store_maximum_lowered_flag。这应该有助于获取列表,而无需作为管理员运行。下面添加了标志的Microsoft文档作为参考:

cert_store_maximum_allowed_flag-打开最大集的商店允许许可。如果指定了此标志,则注册表商店为首先以写入访问打开,如果失败,它们将重新打开使用只读访问。

我可以在当地的机器商店中看到所有证书。

最新更新