2014-04-13 14 views
7

Tôi sẽ tìm hiểu cách xử lý lưu lượng HTTPS trong C# dưới dạng phía máy chủ và đối với các bước đầu tiên tôi gặp một số sự cố.Chế độ máy chủ SSL # C phải sử dụng chứng chỉ với khóa riêng tương ứng

Dưới đây là một số mã (http://pastebin.com/C4ZYrS8Q):

class Program 
{ 
    static bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) 
    { 
     if (sslPolicyErrors == SslPolicyErrors.None) return true; 
     Console.WriteLine("Certificate error: {0}", sslPolicyErrors); 
     return false; 
    } 

    static void Main() 
    { 
     var tcpListener = new TcpListener(IPAddress.Parse("127.0.0.1"), 8080); 
     tcpListener.Start(); 
     var clientAccept = tcpListener.AcceptTcpClient(); 
     Thread.Sleep(1000); 

     if (clientAccept.Available > 0) 
     { 
      var sslStream = new SslStream(clientAccept.GetStream(), false, new RemoteCertificateValidationCallback(ValidateServerCertificate), null); 
      var certificate = new X509Certificate("path\server.pfx", "password"); 
      sslStream.AuthenticateAsServer(certificate); 
     } 

     Console.ReadLine(); 
    } 
} 

Đừng cãi! :) Đó là mã thử nghiệm chỉ nơi tôi chỉ muốn đạt được một số bước cơ bản với việc xử lý SSL trong C#.

Vì vậy, ... Các vấn đề xảy ra ở dòng này:

sslStream.AuthenticateAsServer(certificate); 

enter image description here

Từ Nga nó dịch là: - chế độ máy chủ SSL phải sử dụng chứng chỉ với khóa riêng tương ứng.

tôi nghĩ, mà tôi đã thực hiện chứng nhận X509 của tôi không chính xác, nhưng kiểm tra lại:

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> 

Và dường như là tất cả là tốt với việc tạo ra X509, và bằng chứng khác là dòng này hoạt động tốt :

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

Và chương trình không ném ngoại lệ trên dòng ở trên.

Vì vậy, vấn đề với SSL hanlding trong mã của tôi là gì và làm cách nào để xử lý luồng SSL đến dưới dạng phía máy chủ?

+0

Khách hàng sẽ liên lạc với máy chủ bằng cách sử dụng SSL là gì? Hiển thị mã máy khách. –

+0

@HamletHakobyan chỉ cần duyệt Chrome, đó là ứng dụng khách, sử dụng 'https: //' URI –

Trả lời

10

Tất cả đều ổn, câu trả lời là sử dụng X509Certificate2 lớp thay vì X509Certificate.

Và để thêm vào danh sách tin cậy mà chứng chỉ đã tạo của bạn.

Các vấn đề liên quan