2011年4月23日 星期六

根據驗證程序,遠端憑證是無效的

  原本在別台上可以正常運作的VB.NET(SSIS的指令碼工作)寄信程式,搬移到另一台竟會出錯,錯誤為"根據驗證程序,遠端憑證是無效的",這程式只是利用NetworkCredentialSSL驗證,System.Net.Mail去寄信而已
  這錯誤很怪的地方有兩個,一是用try catch居然捕捉不到,這我不知為什,另一個就是這台出錯,其他台都不會

  上網搜尋相關資訊,這篇Troubleshooting: 根據驗證程序,遠端憑證是無效的。有相關解答,解法就是避開憑證檢查的步驟囉,但此篇是C#版,後來我有找到VB版的,基本上加入藍字的部分就好,黑字是原本的程式,如下

'先加入命名空間
imports System.Net.Security
imports System.Security.Cryptography.X509Certificates


'在驗證前加入此行
System.Net.ServicePointManager.ServerCertificateValidationCallback = New System.Net.Security.RemoteCertificateValidationCallback(AddressOf RemoteCertificateValidationCallback)
xSMTP.Credentials = New System.Net.NetworkCredential("帳號", "密碼")
xSMTP.Host = "mail server"
xSMTP.EnableSsl = True
....

    '找個地方放這行,我是放在最下面
    Public Shared Function RemoteCertificateValidationCallback(ByVal sender As Object, ByVal certificate As System.Security.Cryptography.X509Certificates.X509Certificate, ByVal chain As System.Security.Cryptography.X509Certificates.X509Chain, ByVal sslPolicyErrors As Net.Security.SslPolicyErrors) As Boolean
        Return True
    End Function

  其實這個還有另一個解法更為簡單,我只是把xSMTP.EnableSsl改成false就行了,不用加那麼多行,但我想應該只適用我這種情況吧

  但改成不啟用SSL就可以寄信就更詭異了,因為我們使用的exchange有啟用SSL喔,不管是我們的outlook,outlook express甚至其他程式都須啟用SSL才可以寄信,否則是不行的,但不知為什這台不用,也沒有特別設定路由呢,後來發現這台上的database mail也不能啟用SSL,否則也會寄信失敗,真不知為什這台不能啟用SSL,別台就要,我到現在還是搞不清楚...

0 意見:

張貼留言