7

Web リクエストを介してデータファイルを送信する必要があるプロジェクトがあります。相互認証とも呼ばれる双方向認証をセットアップする必要があります。特別な証明書が必要かどうかはわかりませんが、レベル 3 である必要があることはわかっています。

この場合のサンプル コードが見つかりません。証明書情報をどこに追加すればよいかわかりません。このコードでUnderlying connection is closedは、応答ストリームを読み取ろうとするとエラーがスローされ、ServicePointManager.ServerCertificateValidationCallback呼び出されません。ここに私が持っているものがあります:

ServicePointManager.ServerCertificateValidationCallback = New Security.RemoteCertificateValidationCallback(AddressOf MyCertValidationCb)
            httpReq = CType(System.Net.HttpWebRequest.Create(url), HttpWebRequest)
            For Each cert As String In certs
                X509cert = X509Certificate2.CreateFromCertFile(cert)
                X509cert2 = New X509Certificate2(X509cert)
                httpReq.ClientCertificates.Add(X509cert2)
            Next
            httpReq.Method = "POST"        ' Post method
            httpReq.ContentType = "text/xml"               ' content type

            ' Wrap the request stream with a text-based writer
            writer = New StreamWriter(httpReq.GetRequestStream())
            ' Write the XML text into the stream
            reader = New StreamReader(filename.Name)
            ret = reader.ReadToEnd()
            reader.Close()
            ' Send the data to the webserver
            writer.WriteLine(ret)
            writer.Close()
            ' Wait for response
            Dim httpRsp As System.Net.HttpWebResponse = CType(httpReq.GetResponse(), HttpWebResponse)
            sr = New StreamReader(httpRsp.GetResponseStream)
            responseText = sr.ReadToEnd

            If httpReq IsNot Nothing Then
                httpReq.GetRequestStream().Close()
            End If
            If httpRsp IsNot Nothing Then
                httpRsp.GetResponseStream().Close()
            End If

サンプルコードを含むブログへのヒントやリンクは素晴らしいでしょう。ありがとう。

4

1 に答える 1

1

「特別な」証明書は必要ありません。クライアントには独自の証明書が必要であり、接続でそれを使用してサーバーに身元を伝えます。これはクライアント証明書と呼ばれます。サーバーはこれを適切に処理する必要があります。

次のMSDN記事では、ClientCertificate を設定する方法について説明しています 。

于 2012-12-14T12:49:34.863 に答える