2015-07-24 16 views
1

Я использую SslStream для создания веб-сервера. Тем не менее, приведенный ниже код выдает исключение в AuthenticateAsServer.X509Certificate2 режим сервера SSL должен использовать сертификат с соответствующим закрытым ключом

static X509Certificate cert; 
protected virtual Stream GetStream(TcpClient client) 
{ 
     var ss = new SslStream(client.GetStream(), false); 
     if (cert == null) 
     { 
      cert = X509Certificate2.CreateFromCertFile("test.cer"); 
     } 
     ss.AuthenticateAsServer(cert, false, System.Security.Authentication.SslProtocols.Tls, true); 
     return ss; 
} 

Я уже использовал X509Certificate2, чтобы загрузить файл CERT, почему он до сих пор бросить исключение (режима SSL сервера должен использовать сертификат с связанным с ним закрытым ключом)?

Файл CERT был создан с помощью следующей команды:

makecert  
    -pe          Exportable private key 
    -n "CN=localhost"      Subject name 
    -ss my         Certificate store name 
    -sr LocalMachine      Certificate store location 
    -a sha1         Signature algorithm 
    -sky signature       Subject key type is for signature purposes 
    -r          Make a self-signed cert 
    "test.cer"       Output filename 

ответ

3
makecert.exe -r -pe -n "CN=localhost" -sky exchange -sv server.pvk server.cer 
pvk2pfx -pvk server.pvk -spc server.cer -pfx server.pfx -pi <password> 

var certificate = new X509Certificate("path\server.pfx", "password"); 
+0

Благодаря это работает отлично, я должен был использовать новый X509Certificate2, хотя (не X509Certificate) – drake7707

+0

'Ошибка: Невозможно создать файл для объекта ('server.pvk') '. У Windows есть пользовательский интерфейс для всего, они не могли сделать кнопку для этого через 1 секунду? –