2014-09-29 32 views
15

Đây có vẻ là lỗi phổ biến nhưng trong khi tôi tìm thấy một công việc xung quanh (xem bên dưới), tôi không thể xác định lý do Tôi nhận được nó ở nơi đầu tiên.Nhận "Chứng chỉ từ xa không hợp lệ theo quy trình xác thực" khi máy chủ SMPT có chứng chỉ hợp lệ

Tôi đang viết chức năng SMTP vào ứng dụng của chúng tôi và tôi đang cố thêm chức năng SSL vào SMTP đang hoạt động mà chúng tôi đã có.

Tôi đang thử nghiệm bằng máy chủ MS Exchange của công ty và cụ thể là tùy chọn webmail được bật trên đó. Tôi có thể gửi email nội bộ thông qua mã của tôi bằng cách không xác thực kết nối của tôi và gửi ẩn danh, tuy nhiên những email đó sẽ không chuyển tiếp tới địa chỉ email bên ngoài do chính sách công ty của chúng tôi. Bên cạnh đó tôi đang lập trình này cho khách hàng của chúng tôi và họ không phải tất cả cho phép mở relay và/hoặc các kết nối vô danh.

Tôi tin rằng máy chủ Exchange đang sử dụng SSL/TLS rõ ràng. Tôi đã thử telnet đến địa chỉ của máy chủ trên cổng 25 và nhận được phản hồi văn bản, phản hồi có thể đọc được của con người, theo một số tìm kiếm của tôi trước đây có nghĩa là nó sử dụng Explicit SSL/TLS.

Tôi có mã kiểm tra sau

SmtpClient SMTPClient = new SmtpClient(webmailaddress); 
SMTPClient.Port = 25; 
SMTPClient.UseDefaultCredentials = true; 
SMTPClient.EnableSsl = true; 
System.Net.Mail.MailMessage Message = new ` 
System.Net.Mail.MailMessage(emailFrom,emailTo,subject,body); 
SMTPClient.Send(Message); 

Trong tìm kiếm của tôi cho một giải pháp tôi đi qua này "The remote certificate is invalid according to the validation procedure." using Gmail SMTP server

Từ mà tôi nhận được đoạn mã sau ...

ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateServerCertificate); 

public static bool ValidateServerCertificate(object sender,X509Certificate certificate,X509Chain chain,SslPolicyErrors sslPolicyErrors) 
{ 
    if (sslPolicyErrors == SslPolicyErrors.None) 
     return true; 
    else 
    { 
     if (System.Windows.Forms.MessageBox.Show("The server certificate is not valid.\nAccept?", "Certificate Validation", System.Windows.Forms.MessageBoxButtons.YesNo, System.Windows.Forms.MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes) 
      return true; 
     else 
      return false; 
    } 
} 

này hoạt động trong mã thử nghiệm của tôi. BAO GIỜ quá trình thực tế tôi đang viết (thay vì mã thử nghiệm của tôi) sẽ chạy trong nền và không thể thực sự yêu cầu người dùng (thay vào đó nó báo cáo lỗi trong nhật ký lỗi cửa sổ).

Khi tôi bắt đầu, câu hỏi của tôi thực sự là lý do tại sao tôi nhận được lỗi này. Nếu tôi truy cập https: webmail.ourdomain.co.uk trong trình duyệt, nó hiển thị chứng chỉ hợp lệ và không có tùy chọn cài đặt chứng chỉ (như tôi đã thực hiện nếu đó là chứng chỉ tự ký).

Certificate Screenshot Tuy nhiên, khi tôi chạy mã của mình, với lỗi ngắt trong phương thức ValidateServerCertificate, tôi xem xét các giá trị chứng chỉ và xem nhà phát hành máy chủ cục bộ của chúng tôi và 'không sử dụng trước' và 'don' t sử dụng sau khi 'tài sản của ngày hôm nay. Điều này không khớp với chứng chỉ tôi nhận được.

Tôi cũng đã kiểm tra xem các cờ sslPolicyErrors có trong debug của ValidateServerCertificate và chúng đang hiển thị "RemoteCertificateChainErrors" và "RemoteCertificateNameMismatch" hay không.

Vì vậy, tôi thiếu gì về điều này ... tại sao nó không sử dụng chứng chỉ chính xác? Nếu có các bước tôi cần thực hiện để cài đặt chứng chỉ cục bộ để sử dụng thì tôi cần phải biết chúng để tôi có thể cho khách hàng biết phải làm gì nếu họ nhận được điều này.

Tôi không muốn chỉ bằng cách vượt qua kiểm tra bằng cách trả về true từ phương thức ValidateServerCertificate và vì đó là quy trình nền mà tôi không thể hỏi người dùng, vì vậy tôi cần hiểu cách sử dụng mã của mình chứng chỉ đúng/đáng tin cậy.

Hy vọng ai đó có thể tư vấn.

+0

Tôi đoán không ai biết câu trả lời cho điều này. Vẫn chưa tìm thấy giải pháp :( – RosieC

Trả lời

7

Câu trả lời cuối cùng tôi tìm thấy là dịch vụ SMTP trên máy chủ không sử dụng cùng một chứng chỉ như https.

diagnostic steps I had read here giả định rằng họ sử dụng cùng một chứng chỉ và mỗi lần tôi thử điều này trong quá khứ họ đã làm và các bước chẩn đoán chính xác là những gì tôi đã làm để giải quyết vấn đề nhiều lần.

Trong trường hợp này, các bước này không hoạt động vì chứng chỉ đang sử dụng khác nhau và khả năng đây là điều tôi chưa từng gặp.

Giải pháp là xuất chứng chỉ thực từ máy chủ và sau đó cài đặt chứng chỉ tin cậy trên máy của tôi hoặc để nhận chứng chỉ hợp lệ/đáng tin cậy khác cho dịch vụ SMTP trên máy chủ. Đó là hiện tại với bộ phận CNTT của chúng tôi, người quản lý các máy chủ để quyết định xem họ muốn làm gì.

0

Bài đăng cũ, nhưng tôi nghĩ tôi sẽ chia sẻ giải pháp của mình vì không có nhiều giải pháp cho vấn đề này.

Nếu bạn đang chạy máy Windows Server 2003 cũ, bạn có thể cần cài đặt hotfix (KB938397).

Sự cố này xảy ra do API mật mã 2 (CAPI2) trong Windows Máy chủ 2003 không hỗ trợ thuật toán băm SHA2. CAPI2 là một phần của API mã hóa xử lý chứng chỉ.

https://support.microsoft.com/en-us/kb/938397

Đối với bất cứ lý do nào, Microsoft muốn gửi email cho bạn hotfix này thay vì cho phép bạn tải về trực tiếp. Dưới đây là một liên kết trực tiếp đến các hotfix từ email:

http://hotfixv4.microsoft.com/Windows Server 2003/sp3/Fix200653/3790/free/315159_ENU_x64_zip.exe

2

Cũ bưu điện, nhưng như bạn nói "tại sao là nó không sử dụng giấy chứng nhận đúng" Tôi muốn cung cấp một cách để tìm ra các chứng chỉ SSL là sử dụng cho SMTP (xem here) mà cần openssl:

openssl s_client -connect exchange01.int.contoso.com:25 -starttls smtp

này sẽ phác thảo các chứng chỉ SSL đã qua sử dụng ficate cho dịch vụ SMTP. Dựa trên những gì bạn thấy ở đây, bạn có thể thay thế chứng chỉ sai (như bạn đã làm) bằng chứng chỉ đúng (hoặc tin tưởng chứng chỉ theo cách thủ công).

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