質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

1回答

3408閲覧

HTTPS(自己証明書)+Digest認証でのログイン+ファイルダウンロード方法

warks1

総合スコア12

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2018/11/13 00:53

編集2018/11/13 02:57

###実現したいこと

ローカル内にある機器の管理画面に自動でログインするプログラムを作成し、一定時間ごとにログ(.wri)をダウンロードしたいと考えています。
外部公開する用のページではない為だと思いますが、HTTPS(自己証明書使用)が使用されており
Digest認証がログイン時に使用されています。

発生している問題・エラーメッセージ

wc.DownloadFile("https://192.168.1.100/report_.wri", @"C:\inetpub\ftproot\1.wri");
上記箇所で下記のエラーが表示されます。
ログインが正常に出来ていれば、このURLは間違いなく存在しているのですが、原因・確認方法が分かっていません。
ダイジェスト認証が出来ていないのかと思っていますが、確認方法や間違ってる記述等ありましたら回答お願いいたします。

System.Net.WebException: 'リモート サーバーがエラーを返しました: (404) 見つかりません'

該当のソースコード

C#

1{ 2ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(OnRemoteCertificateValidationCallback); 3ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; 4 5 6CredentialCache cache = new CredentialCache(); 7Uri prefix = new Uri("https://192.168.1.100"); 8cache.Add(prefix, "Digest", new NetworkCredential("admin", "password")); 9 10WebClient wc = new WebClient(); 11wc.Credentials = cache; 12wc.DownloadFile("https://192.168.1.100/report_.wri", @"C:\inetpub\ftproot\1.wri"); 13wc.Dispose(); 14 15} 16private bool OnRemoteCertificateValidationCallback( 17 Object sender, 18 X509Certificate certificate, 19 X509Chain chain, 20 SslPolicyErrors sslPolicyErrors) 21 { 22 // 信用したことにする 23 return true; 24 }

流れ

①【https://192.168.1.100】にDigect認証
②認証情報を継承して【https://192.168.1.100/report_.wri】のファイルをダウンロード

補足情報(FW/ツールのバージョンなど)

OS:Windows 7
ツール:visual studio 2017

### Form Date
![イメージ説明]

http://neue.cc/2009/12/17_230.html】
このサイトを参考に同じように記述してみましたが、
System.Net.WebException: 'リモート サーバーがエラーを返しました: (400) 要求が不適切です'
となります。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

asm

2018/11/13 01:26

>HTTPS(自己証明書使用) との事ですが、証明書のインストール作業もしくは握りつぶしは行っていますか?
warks1

2018/11/13 02:10 編集

ご指摘いただき、信用出来ないSSL証明書を回避するコードを入れました。 ありがとうございます。
guest

回答1

0

ベストアンサー

C#

1ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

このように、ServicePointManager.SecurityProtocolにてTSL1.2、SSL3.0等を有効にしてはどうでしょう?

また、こちらは参考になりますでしょうか?

投稿2018/11/13 01:08

編集2018/11/13 01:14
YAmaGNZ

総合スコア10258

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

warks1

2018/11/13 01:14 編集

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; 上記追加では変わらず、同じエラーが表示されますが、 https://stackoverrun.com/ja/q/5479365 上記を参考に下記を追加したところ、またエラーが変わりました。少し進展があったということでしょうか。質問も変更しますのでよろしくお願いいたします。 ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 ;
warks1

2018/11/13 01:27

SSL3にも脆弱性が見つかっていることに今気づきました。 上記だとむしろ後退していますね… ただ、SecurityProtocolType.Tls12 ですとか SecurityProtocolType.Tls11 とか足してみましたが、変わらずでした。
warks1

2018/11/13 01:37

回答いただきました、おかげで進展がありました。 エラー内容も変わりましたので質問文も変更しました。 ありがとうございます。
YAmaGNZ

2018/11/13 02:26

そのサーバへの認証等でcookieを利用したりするのでしょうか? そうであれば、webclientではcookieに対応していないので、拡張してやる必要があります。 また、こちらにあるようにMIMEタイプの設定も関係しそうです。 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=30845&forum=7
warks1

2018/11/13 02:40 編集

無知で的外れな返答していましたら申し訳ありません。 chromeの検証機能で、ログイン時のPOSTを確認したところ、cookie情報 Cookie: temp=temp; curUsr=; curUrl=; SessId=; PageSeed= の様な箇所がありました。 Formデータは質問に追加させていただきます。 MIMEタイプについては同じ拡張子で保存等でいますので問題ないかと思っています。
YAmaGNZ

2018/11/13 08:06

私も詳しくないので、回答があいまいになってしまっています。 提案ですが、fiddlerを使って、ブラウザからアクセスした場合、アプリからアクセスした場合を比較してみてはどうでしょう? 何か分かるかもしれません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問