Я пытаюсь использовать класс HttpListener в приложении C #, чтобы мини-веб-сервер обслуживал контент по SSL. Для этого мне нужно использовать инструмент httpcfg. У меня есть файл .pfx с моей парой открытого и закрытого ключей. Если я импортирую эту пару ключей вручную, используя mmc, в локальное хранилище компьютеров, все работает нормально. Однако, если я импортирую эту пару ключей программно с помощью класса X509Store, я не смогу подключиться к своему мини-веб-серверу. Обратите внимание, что в обоих методах сертификат импортируется в хранилище MY в LocalMachine. Как ни странно, я могу просмотреть сертификат в mmc после того, как программно импортирую его, и когда я его просматриваю, пользовательский интерфейс указывает, что для этого сертификата также доступен закрытый ключ.
Копая немного глубже, я замечаю, что когда я вручную импортирую пару ключей, я вижу, что новый файл появляется в C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys
, но он не появляется, когда я импортирую программно. С другой стороны, когда я удаляю импортированный вручную сертификат, он не удаляет соответствующий файл закрытого ключа из ранее упомянутого каталога.
В конечном счете, мой вопрос таков: когда я программно добавляю сертификат в хранилище, где хранится закрытый ключ и почему он недоступен для класса HttpListener (HttpApi)?
Обратите внимание, что этот вопрос немного связан, но я не думаю, что разрешение - это проблема, поскольку все это делается одним и тем же пользователем Windows:
Как установить разрешение на чтение файла закрытого ключа сертификата X.509 из .NET