Registrar certificado na porta SSL

Eu tenho um serviço do Windows (executando como LocalSystem) que hospeda automaticamente um serviço OWIN (SignalR) e precisa ser acessado por SSL.

Posso configurar bem a ligação SSL na minha máquina de desenvolvimento local - e posso acessar meu serviço via SSL nessa mesma máquina. No entanto, quando vou para outra máquina e tento executar o seguinte comando, recebo um erro:

Comando:

netsh http add sslcert ipport=0.0.0.0:9389 appid={...guid here...} certhash=...cert hash here...

Erro:

Falha ao adicionar certificado SSL, Erro: 1312

Uma sessão de logon especificada não existe. Pode já ter sido encerrado.

O certificado que estou usando é um certificado totalmente assinado (não um certificado de desenvolvimento) e funciona na minha caixa de desenvolvimento local. Aqui está o que estou fazendo:

O serviço Windows é iniciado e registra meu certificado usando o seguinte código:

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();

Em seguida, tento vincular o certificado à porta 9389 usando netsh e o seguinte código:

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();

O código acima instala com êxito o certificado na pasta de certificado "Máquina local - Certificados \ Autoridades de certificação raiz confiáveis \ Certificados" - mas o comando netsh falha ao executar com o erro descrito acima. Se eu pegar o comando netsh e executá-lo em um prompt de comando como administrador nessa caixa, ele também emitirá o mesmo erro - por isso não acredito que seja um problema relacionado ao código ...

Eu tenho que imaginar que isso é possível - muitos outros aplicativos criam serviços auto-hospedados e os hospedam através de SSL - mas eu não consigo fazer isso funcionar ... alguém tem alguma sugestão? Talvez alternativas programáticas ao netsh?

questionAnswers(2)

yourAnswerToTheQuestion