- - PR -
C# https通信
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2004-10-06 11:51
HTTPS(SSL)通信でエラーが発生します。
エラー内容 *********************************************************************** 基になる接続が閉じられました : リモート サーバーと信頼関係を確立できませんでした。 *********************************************************************** 1,httpサイト、一部のhttpsサイトには接続可能な状態です。 2,証明書のインストール、登録作業をMMC、ブラウザーに行いました。 ソースコード using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Net; using System.Web; using System.IO; using System.Text; using System.Security; public class Class2 { public static void Main(){ string OrderNo = null; string con_url = null; string Amount = null; string URL = null; string Account = null; string Password = null; string paytype = null; paytype = "type"; OrderNo = "333"; Amount = "12"; Account = "sasa"; Password = "saa"; con_url = "接続サイトを記入"; Stream stream = null; StreamReader sr = null; try{ System.Net.WebRequest webReq = HttpWebRequest.Create(con_url); //ポスト送信設定 webReq.Method = "POST"; // 5秒でタイムアウトさせる。 webReq.Timeout = 5000; // デフォルトのコンテントタイプ webReq.ContentType = "application/x-www-form-urlencoded"; string param = "enctype=text/plain&=paytype"; param += HttpUtility.UrlEncode(paytype, Encoding.GetEncoding("SHIFT-JIS")); param += " Account="; param += HttpUtility.UrlEncode(Account, Encoding.GetEncoding("SHIFT-JIS")); param += "&Password="; param += HttpUtility.UrlEncode(Password, Encoding.GetEncoding("SHIFT-JIS")); param += "&OrderNo="; param += HttpUtility.UrlEncode(OrderNo, Encoding.GetEncoding("SHIFT-JIS")); param += "&Amount="; param += HttpUtility.UrlEncode(Amount, Encoding.GetEncoding("SHIFT-JIS")); Debug.WriteLine("AAA"); //Ascii なので、エンコーディングは指定する必要なし。 StreamWriter sw = new StreamWriter(webReq.GetRequestStream(), Encoding.GetEncoding("SHIFT-JIS")); sw.Write("param"); sw.Close(); // 結果を受け取る。 WebResponse webRes = webReq.GetResponse(); // HttpWebRequest からストリームを取得する。 stream = webRes.GetResponseStream(); // SHIFT JIS で読み取る。 sr = new StreamReader(stream, Encoding.GetEncoding("SHIFT-JIS")); String str = null; str = sr.ReadToEnd(); Debug.WriteLine(str); } catch (Exception exc){ Debug.WriteLine(exc.Message); } finally{ if (sr != null) sr.Close(); if (stream != null) stream.Close(); } } } 解決策があればご教授お願い致します。 |
|
投稿日時: 2004-10-06 17:10
南部です。
エラーメッセージから察するに、 ブラウザからアクセスすると証明書に関して 「セキュリティの警告」がでませんか? もしでるのであれば、それが原因です。 「セキュリティ証明書の名前が無効であるか、またはサイト名と、、、、」 だけに警告マークがあるのであれば、 App.configのconfiguration下に <system.net> <settings> <servicePointManager checkCertificateName="true" /> </settings> </system.net> を設定すればよいらしいです(未確認)。 他の 「このセキュリティ証明書は、信頼する会社から、、、」 や、日付での警告の回避は、次の実装になります(確認済み) 1.次のクラスを作成します。 public class MyPolicy : ICertificatePolicy { public bool CheckValidationResult( ServicePoint srvPoint, System.Security.Cryptography.X509Certificates.X509Certificate certificate, WebRequest request, int certificateProblem) { if (certificateProblem == 0 || //正常 certificateProblem == -2146762487 || //信頼されてない? certificateProblem == -2146762495 || //期限切れ certificateProblem == -2146762481) //名前不正? return true; else return false; } } #確認ダイアログを出してもいいですね。 2.初期化処理に次のコードを追加 System.Net.ServicePointManager.CertificatePolicy = new MyPolicy(); 以上です。 なお、動作確認環境は、 クライアント:Window 2000 Pro + .NET Framework 1.1 SP1 サーバー:Window 2000 Server です。 [ メッセージ編集済み 編集者: nanbu 編集日時 2004-10-06 17:42 ] |
|
投稿日時: 2004-10-06 18:58
南部さん。
ありがとうございました。無事、接続できました。 こうした処理を勉強するにあたり、何かおすすめの書籍はありますか? |
|
投稿日時: 2004-10-06 21:05
書籍ですか、私も知りたいです。
私の場合、MSDNライブラリとネットの情報です。 # あ、いや、私の場合、仕事じゃなくて趣味なんで # あまり、調べていません。 # 誰か教えてください。 |
1