1

「検証手順に従ってリモート証明書が無効です」という例外メッセージが表示され、次のコードが表示されます。

ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(MyCertValidationCb);

var request = (FtpWebRequest)WebRequest.Create(new Uri(myUri));
request.EnableSsl = true;
request.Method = WebRequestMethods.Ftp.UploadFile;
request.BeginGetRequestStream(EndGetStreamCallback, _state);


public static bool MyCertValidationCb(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
    if ((sslPolicyErrors & SslPolicyErrors.RemoteCertificateChainErrors)
              == SslPolicyErrors.RemoteCertificateChainErrors)
    {
        return false;
    }
    if ((sslPolicyErrors & SslPolicyErrors.RemoteCertificateNameMismatch)
        == SslPolicyErrors.RemoteCertificateNameMismatch)
    {
        Zone z;
        z = Zone.CreateFromUrl(((FtpWebRequest)sender).RequestUri.ToString());
        if (z.SecurityZone == SecurityZone.Intranet
            || z.SecurityZone == SecurityZone.MyComputer)
        {
            return true;
        }
        return false;
    }
    return false;
} 

FTP サーバーは filezilla です。FTP over SSL が有効になり、明示的な FTP over TLS を許可するも有効になります。certificate.crt ファイルを生成しました。filezilla クライアントを使用して ftp の場所に接続し、ポップアップ ウィンドウで [常にこの証明書を信頼する] をオンにしました。

MyCertValidationCb メソッドでは、(sslPolicyErrors & SslPolicyErrors.RemoteCertificateChainErrors) == SslPolicyErrors.RemoteCertificateChainErrors は常に true です。

MyCertValidationCb を変更して常に true を返すようにすると、ftp 要求は問題なく通過します。証明書の問題だと思います。誰にもアイデアはありますか?

4

1 に答える 1

2

RemoteCertificateChainErrors は、信頼されたルート証明機関の証明書ストアに証明書がないことが原因でした。

Filezilla は、次の形式で自己署名証明書を生成します。

-----RSA 秘密鍵の開始-----

//ハッシュ

-----END RSA 秘密鍵-----

-----証明書の開始-----

//ハッシュ

---エンド証明書-----

証明書をインポートするには、秘密鍵セクションを削除し、新しいファイルを保存します。これを信頼されたルート証明機関の証明書ストアにインストールします。

今私が抱えている問題は、RemoteCertificateNameMismatch です。別のトピックに投稿します。

于 2010-09-08T18:07:21.273 に答える