Зарегистрировать сертификат на порт SSL
У меня есть служба Windows (запущенная как LocalSystem), которая самостоятельно размещает службу OWIN (SignalR) и должна быть доступна через SSL.
Я могу отлично настроить привязку SSL на своем локальном компьютере разработки - и я могу получить доступ к своему сервису через SSL на том же компьютере. Однако, когда я иду на другую машину и пытаюсь выполнить следующую команду, я получаю сообщение об ошибке:
Команда:
netsh http add sslcert ipport=0.0.0.0:9389 appid={...guid here...} certhash=...cert hash here...
Ошибка:
Ошибка добавления сертификата SSL, ошибка: 1312
Указанный сеанс входа не существует. Возможно, оно уже было прекращено.
Сертификат, который я использую, является полностью подписанным сертификатом (не сертификатом разработки) и работает на моем локальном устройстве разработчика. Вот что я делаю:
Служба Windows запускается и регистрирует мой сертификат, используя следующий код:
var store = new X509Store(StoreName.Root, StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadWrite);
var path = AppDomain.CurrentDomain.BaseDirectory;
var cert = new X509Certificate2(path + @"\mycert.cer");
var existingCert = store.Certificates.Find(X509FindType.FindByThumbprint, cert.Thumbprint, false);
if (existingCert.Count == 0)
store.Add(cert);
store.Close();
Затем я пытаюсь привязать сертификат к порту 9389, используя netsh и следующий код:
var process = new Process {
StartInfo = new ProcessStartInfo {
WindowStyle = ProcessWindowStyle.Hidden,
FileName = "cmd.exe",
Arguments = "/c netsh http add sslcert ipport=0.0.0.0:9389 appid={12345678-db90-4b66-8b01-88f7af2e36bf} certhash=" + cert.thumbprint
}
};
process.Start();
Приведенный выше код успешно устанавливает сертификат в папку сертификатов «Локальный компьютер - Сертификаты \ Доверенные корневые центры сертификации \ Сертификаты», но команда netsh не запускается с ошибкой, описанной выше. Если я беру команду netsh и запускаю ее в командной строке от имени администратора в этом окне, она также выдает ту же ошибку - поэтому я не верю, что это связано с кодом ...
Я должен представить, что это возможно сделать - множество других приложений создают собственные службы и размещают их через ssl - но я не могу заставить это работать вообще ... у кого-нибудь есть какие-либо предложения? Возможно программные альтернативы netsh?