Как получить список хранилища сертификатов Windows на локальном компьютере с помощью Go? - PullRequest
0 голосов
/ 19 марта 2019

Go позволяет довольно легко получить дескриптор хранилища сертификатов Personal Windows для текущего пользователя с помощью следующей команды:

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

Однако, когда я пытаюсь получить хранилище сертификатов Local Machine Personal, я всегда заканчиваюили с пустым дескриптором хранилища, и с исключением или ошибкой, что хранилище не было найдено, 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")))) 

Но когда я меняю значения для хранилища локального компьютера, я начинаю видеть ошибки, указанные выше.

Каквы успешно получаете хранилище сертификатов локального компьютера в Windows с помощью Go?

1 Ответ

0 голосов
/ 19 марта 2019

Вы используете следующий фрагмент кода, как упомянуто в комментариях выше, чтобы получить сертификаты:

    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 ++, я увидел ошибку отказа в доступе.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...