The project of U-WA-
http://uwa.potetihouse.com/
トップページ > 記事閲覧
アイコン WindowsServer2012R2へFTPS接続
日時: 2014/07/16 14:57
名前: FUJI

お世話になります。富士と申します。

WindowsServerのFTPSへ接続できる.NETのクラスライブラリを探して
TKFP.DLLにたどり着きました。

貴ホームページに掲示されている
.NET 2.0用 サンプルコード付 TKFPDLL_1.4.4-2_s.zip をダウンロードさせていただき
VisualStudio2008でVBのプロジェクトのサンプルコードをビルドして

Windows7(x64)上で実行してWindowsServer2012R2のFTPS(パッシブモード・データチャンネル
暗号化)に接続しようとしましたが、 FtpClient.Connect()のところで
「サーバーへの接続に失敗しました」という例外が発生して接続できませんでした。

サンプルコードのPrivate Sub button1_Click()内では下記のコードのコメントを解除して
FtpClient.IsFileTransferEncrypted = Trueを追加しています。

FtpClient.AuthenticationProtocol = TKFP.Net.AuthenticationProtocols.Explicit_TLS
FtpClient.IsFileTransferEncrypted = True
AddHandler FtpClient.CertificateValidation, AddressOf FtpClient_CertificateValidation

同じWindows7(x64)上で同じWindowsServer2012R2のFTPSに対してはFileZillaという
FTPSクライアントからは[暗黙のFTP over TLSが必要]で正常に接続・アップロードが
できておりますのでサーバー側の環境は問題は少ないかと評価しております。

サンプルの接続モードは既定のパッシブモードのままでございます。
FtpClient.ConnectionMode = TKFP.Net.ConnectionModes.Passive

SSLのサーバー証明書はWindowsServer2012R2の証明局サービスで発行したものです。
WindowsServer2012R2とWindows7(x64)の間にはファイアウォールは介在せず
それぞれのWindowsファイアウォールも無効化しております。

お知恵を拝借いただければ幸いでございます。
よろしくお願いいたします。
メンテ

Page: 1 |

ファイル Re: WindowsServer2012R2へFTPS接続 ( No.1 )
日時: 2014/07/16 16:05
名前: FUJI

追加の情報でございます。

下記のコードでは元のポート番号21を実際のサーバーでバインドしているポート番号n
990に変更しております。
FtpClient = New TKFP.Net.FtpClient(bp, txtAddress.Text, 990)

IIS側でポート番号21としますとFileZillaが接続時に、
「選択されたポートは通常違うプロトコルによって利用されています.」という
警告を出力しますので、FileZillaが既定値と認識する990としております。
メンテ
ファイル Re: WindowsServer2012R2へFTPS接続 ( No.2 )
日時: 2014/07/16 16:17
名前: FUJI

追加の情報でございます。

貴ホームページのTipsの「通信を暗号化する」のコードサンプルでも
'FTPクライアントクラスの作成
Dim ftp As New TKFP.Net.FtpClient(logon, server, 21)
でポート番号は21で書かれていますので、もしやと思い
WindowsServerのIISのFTPSのバインドするポート番号を990から21へ変更して
サンプルコードのポート番号も
FtpClient = New TKFP.Net.FtpClient(bp, txtAddress.Text, 21)
21に戻して接続ししたところ、
それまではFtpClient.Connect()の実行で例外「サーバーへの接続に失敗しました」が
スローされて接続できませんでしたが、
FtpClient.Connect()は成功して接続できるようになりました。

ただし、そのあとの ShowFolder()の実行で
「予期せぬエラーが発生しました(code = 534) PROT C Policy requires SSL.」
という例外がスローされております。
メンテ
ファイル Re: WindowsServer2012R2へFTPS接続 ( No.3 )
日時: 2014/07/16 16:34
名前: FUJI

追加の情報でございます。

>ShowFolder()の実行で
>「予期せぬエラーが発生しました(code = 534) PROT C Policy requires SSL.」
>という例外がスローされております。

こちらは具体的には
For Each d In CurrentDirectory.GetDirectories()
のCurrentDirectory.GetDirectories()からスローされているようでした。

とりあえずPrivate Sub button1_Click()内で接続成功後のShowFolder()の実行を
しないようコメントアウトして、ファイルのアップロードを試してみます。
メンテ
ファイル Re: WindowsServer2012R2へFTPS接続 ( No.4 )
日時: 2014/07/16 16:44
名前: FUJI

追加の情報でございます。

>ファイルのアップロードを試してみます。
ファイルのアップロードは無事に成功しました。

Private Sub button5_Clickのファイルアップロードのコードサンプルでは
最後にShowFolder()の実行がありますので、ここでは前記例外が発生いたします。
よろしければこの例外を回避するお知恵を拝借できれば幸いでございます。

関連しそうな情報ではWindowsServer側のディレクトリ表示スタイルはMS-DOS形式で
追加の表示項目オプションはすべてノーチェックです。
(□仮想ディレクトリ・□空き容量・□西暦4桁表示)

サンプルコード側ではPrivate Sub button1_Click内で下記のようにしております。

'LIST情報の解析クラスを指定
'FtpClient.ListDataLoader = New TKFP.IO.UnixListDataLoader '標準のFTP(デフォルト)
FtpClient.ListDataLoader = New TKFP.IO.MsdosListDataLoader 'IISでディレクトリ表示スタイルをMS-DOSとした場合

'日本語ファイル名の文字コードを指定
FtpClient.FileNameCharset = "sjis" 'シフトJIS(デフォルト)

'デバッグ用のログ出力ファイルを指定
FtpClient.DebugLogFileName = "d:\log.txt"

よろしくお願いいたします。
メンテ
ファイル Re: WindowsServer2012R2へFTPS接続 ( No.5 )
日時: 2014/07/16 16:58
名前: FUJI

追加の情報でございます。

サンプルコード側ではPrivate Sub button1_Click内で下記のように

'FTP over SSL/TLSを使用する場合は以下のように設定します
FtpClient.AuthenticationProtocol = TKFP.Net.AuthenticationProtocols.Explicit_TLS
FtpClient.IsFileTransferEncrypted = True
FtpClient.IsListTransferEncrypted = True
AddHandler FtpClient.CertificateValidation, AddressOf FtpClient_CertificateValidation

FtpClient.IsListTransferEncrypted = Trueを追加しましたところ
CurrentDirectory.GetDirectories()も正常動作するようになりました。

お騒がせいたしました。
メンテ
ファイル Re: WindowsServer2012R2へFTPS接続 ( No.6 )
日時: 2014/07/16 18:01
名前: FUJI

お世話になります。

ちなみにポート番号990ではTKFP.DLLの1.4.4は動作するようにはならない
ようでしたでしょうか?
参考に教えていただければと思います。

よろしくお願いいたします。
メンテ
ファイル Re: WindowsServer2012R2へFTPS接続 ( No.7 )
日時: 2014/07/16 23:07
名前: Toki◆pRU.c9X.EOI

FtpClient.AuthenticationProtocol = TKFP.Net.AuthenticationProtocols.Explicit_TLS

FtpClient.AuthenticationProtocol = TKFP.Net.AuthenticationProtocols.Explicit_SSL
にすると出来ると思います

メンテ
ファイル Re: WindowsServer2012R2へFTPS接続 ( No.8 )
日時: 2014/07/17 14:25
名前: FUJI

お世話になります。

お忙しいところわざわざご回答ありがとうございます。
ご教授いただいたTKFP.Net.AuthenticationProtocolsのあたりを変更しましたところ

FtpClient.AuthenticationProtocol = TKFP.Net.AuthenticationProtocols.Implicit

とすることで無事に990で接続できました。
IIS的にはポート番号990でバインドするとImplicitモードになるという仕様のようでした。

コメントありがとうございました。
メンテ

Page: 1 |

題名 スレッドをトップへソート (必ず題名内に日本語を使用してください)
名前
E-Mail
URL
パスワード (記事メンテ時に使用)
コメント 顔smile01.gif 顔smile02.gif 顔smile03.gif 顔smile04.gif 顔smile05.gif 顔smile06.gif 顔smile07.gif

   クッキー保存