0

Go 允许您使用以下命令轻松检索当前用户的个人 Windows 证书存储句柄:

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 中成功检索本地计算机证书存储?

4

1 回答 1

0

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

    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. 我没有以管理员身份运行 VS Code:我以为我是,但你必须杀死所有实例才能这样做!
  3. 在这种情况下,检索最后一个错误的代码在 Go 中似乎不起作用,但是当我切换到使用 C++ 工作时,我确实看到了拒绝访问错误。
于 2019-03-19T20:51:25.843 回答