目次
はじめに
検証環境にて構築したTransfer FamilyにFTPSにて接続しようとしたところ、
Data connection must use cached TLS session...というエラーで弾かれてしまいました。
この記事では、その原因と対処法について紹介したいと思います。
解決する方法
awscliのtransfer update-serverで対象サーバのTlsSessionResumptionModeをENABLEDに変更する。
aws transfer update-server --server-id s-qawsedrftgyhujiko --protocol-details TlsSessionResumptionMode=ENABLED
{
"ServerId": "s-qawsedrftgyhujiko"
}
解説
まず上記にて紹介したTlsSessionResumptionModeですが、訳すとおそらくTLS セッション再開モードで
SSL/TLS 通信の開始時に生成した共有鍵をどうするかを設定することができます。
AWS Documentation参照すると下記のように説明されています。
FTPS プロトコルを使用する Transfer Family サーバーで使用されるプロパティ。TLS セッション再開は、FTPS セッションの制御接続とデータ接続の間でネゴシエートされた秘密鍵を再開または共有するメカニズムを提供します。TlsSessionResumptionMode サーバーが一意のセッション ID を使用して最近ネゴシエートされたセッションを再開するかどうかを決定します。このプロパティは、CreateServer の間および UpdateServer の呼び出し中に使用可能です。TlsSessionResumptionMode の値が CreateServer の間に指定されていない場合、デフォルトで ENFORCED に設定されます。
デフォルトではこの値はENFORCEDに設定されており、その場合セッションの再利用を行わないFTPクライアントの接続を拒否します。
今回は値をENABLEDに変更することで拒否しないよう設定することでエラーを回避することができました。
セッションを再利用するメリットとしては、セッションを何度も作成(TLSハンドシェイク時)せずキャッシュを利用するため通信が高速化することがあげられますが、逆にセッションを使いまわすので脆弱性が単一障害点的な感覚でできてしまうらしいです。
おわりに
AWS Transfer FamilyでFTPS接続を行った際のエラーの原因と対処法について紹介しました。
セッションの再利用の機能は、FTPクライアントによって利用できるものもあればそうでないものもあるため
覚えておきたいと思います。
この記事の何かしらが参考になれば幸いです。
参考にさせて頂いた記事
https://awscli.amazonaws.com/v2/documentation/api/latest/reference/transfer/update-server.html
https://docs.aws.amazon.com/ja_jp/transfer/latest/userguide/API_UpdateServer.html
https://docs.aws.amazon.com/ja_jp/transfer/latest/userguide/API_ProtocolDetails.html
https://www.repost.aws/questions/QURR9WVIbjQ-uYYFu_gMCdhw/ftp-transfer-family-ftps-tls-resume-failed
https://www.venafi.com/blog/where-tlsssl-handshake-most-vulnerable
https://kaworu.jpn.org/security/SSL_TLS%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%81%E3%82%B1%E3%83%83%E3%83%88
https://ldapwiki.com/wiki/TLS%20Session%20Resumption