EC2 Windows Server 2016の TLS 1.2 クライアント側サポートの有効化

0

状況

EC2(Windows Server 2016)上にApacheを配置し、
Apache上のWebアプリケーションの操作でCakePHPからSMTPのリクエストをAmazon SESへ送信してメールを送信している。
メール送信リクエストをSESに送信する際のハンドシェイク(Client Hello)がTLSv1.0となっているが、TLSv1.2以上としたい。

構成

  • Windows Server 2016
  • Apache
  • CakePHP 3.4.13
  • PHP 7.1.16

前提

  • CakePHP 3.4.13はパッチを当てて、TLSv1.2に対応してた状況
  • サーバ証明書は、AWS Certificate Managerを利用(証明書:有効)
  • Apacheのmod_sslは無効状態
  • パケットをモニタリングしていると他の通信はTLSv1.2で通信できている
  • C#アプリ(exe)からAmazon SESへの通信はTLSv1.2で通信できている

.NET Framework

以下に従い、.NET Framework 4.6.2 以降がインストールされていることは確認済み。
https://learn.microsoft.com/en-us/dotnet/framework/migration-guide/how-to-determine-which-versions-are-installed

パケット状況

1165	2023-10-21 21:36:32.712377	192.168.XX.XX	44.XX.251.XX	TCP	66	56521 → 587 [SYN, ECE, CWR] Seq=0 Win=8192 Len=0 MSS=8961 WS=256 SACK_PERM
1171	2023-10-21 21:36:32.809314	44.XX.251.XX	192.168.XX.XX	TCP	66	587 → 56521 [SYN, ACK] Seq=0 Ack=1 Win=26883 Len=0 MSS=1460 SACK_PERM WS=256
1172	2023-10-21 21:36:32.809363	192.168.XX.XX	44.XX.251.XX	TCP	54	56521 → 587 [ACK] Seq=1 Ack=1 Win=65536 Len=0
1177	2023-10-21 21:36:32.908370	44.XX.251.XX	192.168.XX.XX	SMTP	142	S: 220 email-smtp.amazonaws.com ESMTP SimpleEmailService-d-I2PEJKDK1 FPeIINWn9cCw4exbEI0G
1178	2023-10-21 21:36:32.908513	192.168.XX.XX	44.XX.251.XX	SMTP	83	C: EHLO test.pfms-archives.com
1179	2023-10-21 21:36:33.005468	44.XX.251.XX	192.168.XX.XX	TCP	54	587 → 56521 [ACK] Seq=89 Ack=30 Win=27136 Len=0
1180	2023-10-21 21:36:33.006173	44.XX.251.XX	192.168.XX.XX	SMTP	142	S: 250-email-smtp.amazonaws.com | 8BITMIME | STARTTLS | AUTH PLAIN LOGIN | Ok
1181	2023-10-21 21:36:33.006291	192.168.XX.XX	44.XX.251.XX	SMTP	64	C: STARTTLS
1182	2023-10-21 21:36:33.104044	44.XX.251.XX	192.168.XX.XX	SMTP	78	S: 220 Ready to start TLS
1183	2023-10-21 21:36:33.119514	192.168.XX.XX	44.XX.251.XX	TLSv1.2	571	Client Hello★該当箇所
1187	2023-10-21 21:36:33.218207	44.XX.251.XX	192.168.XX.XX	TLSv1.2	140	Server Hello
1188	2023-10-21 21:36:33.218807	44.XX.251.XX	192.168.XX.XX	TCP	1514	587 → 56521 [ACK] Seq=287 Ack=557 Win=28160 Len=1460 [TCP segment of a reassembled PDU]
1189	2023-10-21 21:36:33.218807	44.XX.251.XX	192.168.XX.XX	TCP	1514	587 → 56521 [ACK] Seq=1747 Ack=557 Win=28160 Len=1460 [TCP segment of a reassembled PDU]
1190	2023-10-21 21:36:33.218838	192.168.XX.XX	44.XX.251.XX	TCP	54	56521 → 587 [ACK] Seq=557 Ack=3207 Win=65536 Len=0
1191	2023-10-21 21:36:33.218876	44.XX.251.XX	192.168.XX.XX	TCP	1514	587 → 56521 [ACK] Seq=3207 Ack=557 Win=28160 Len=1460 [TCP segment of a reassembled PDU]
1192	2023-10-21 21:36:33.218876	44.XX.251.XX	192.168.XX.XX	TLSv1.2	749	Certificate
1193	2023-10-21 21:36:33.218895	192.168.XX.XX	44.XX.251.XX	TCP	54	56521 → 587 [ACK] Seq=557 Ack=5362 Win=65536 Len=0
1194	2023-10-21 21:36:33.219581	44.XX.251.XX	192.168.XX.XX	TLSv1.2	392	Server Key Exchange
1195	2023-10-21 21:36:33.219601	192.168.XX.XX	44.XX.251.XX	TCP	54	56521 → 587 [ACK] Seq=557 Ack=5700 Win=65280 Len=0
1196	2023-10-21 21:36:33.220164	44.XX.251.XX	192.168.XX.XX	TLSv1.2	63	Server Hello Done
1197	2023-10-21 21:36:33.220442	192.168.XX.XX	44.XX.251.XX	TLSv1.2	180	Client Key Exchange, Change Cipher Spec, Encrypted Handshake Message
1213	2023-10-21 21:36:33.320019	44.XX.251.XX	192.168.XX.XX	TLSv1.2	60	Change Cipher Spec
1214	2023-10-21 21:36:33.320591	44.XX.251.XX	192.168.XX.XX	TLSv1.2	99	Encrypted Handshake Message
1215	2023-10-21 21:36:33.320615	192.168.XX.XX	44.XX.251.XX	TCP	54	56521 → 587 [ACK] Seq=683 Ack=5760 Win=65280 Len=0
1216	2023-10-21 21:36:33.320812	192.168.XX.XX	44.XX.251.XX	TLSv1.2	112	Application Data
1217	2023-10-21 21:36:33.418399	44.XX.251.XX	192.168.XX.XX	TLSv1.2	171	Application Data
1218	2023-10-21 21:36:33.418581	192.168.XX.XX	44.XX.251.XX	TLSv1.2	95	Application Data
1221	2023-10-21 21:36:33.516367	44.XX.251.XX	192.168.XX.XX	TLSv1.2	101	Application Data
1222	2023-10-21 21:36:33.516531	192.168.XX.XX	44.XX.251.XX	TLSv1.2	113	Application Data
1223	2023-10-21 21:36:33.614318	44.XX.251.XX	192.168.XX.XX	TLSv1.2	101	Application Data
1224	2023-10-21 21:36:33.614506	192.168.XX.XX	44.XX.251.XX	TLSv1.2	145	Application Data
1225	2023-10-21 21:36:33.746976	44.XX.251.XX	192.168.XX.XX	TLSv1.2	115	Application Data
1226	2023-10-21 21:36:33.747165	192.168.XX.XX	44.XX.251.XX	TLSv1.2	119	Application Data
1231	2023-10-21 21:36:33.845440	44.XX.251.XX	192.168.XX.XX	TLSv1.2	91	Application Data
1232	2023-10-21 21:36:33.845610	192.168.XX.XX	44.XX.251.XX	TLSv1.2	115	Application Data
1247	2023-10-21 21:36:33.943306	44.XX.251.XX	192.168.XX.XX	TLSv1.2	91	Application Data
1248	2023-10-21 21:36:33.943479	192.168.XX.XX	44.XX.251.XX	TLSv1.2	115	Application Data
1250	2023-10-21 21:36:34.041177	44.XX.251.XX	192.168.XX.XX	TLSv1.2	91	Application Data
1251	2023-10-21 21:36:34.041353	192.168.XX.XX	44.XX.251.XX	TLSv1.2	89	Application Data
1252	2023-10-21 21:36:34.139084	44.XX.251.XX	192.168.XX.XX	TLSv1.2	120	Application Data
1253	2023-10-21 21:36:34.139426	192.168.XX.XX	44.XX.251.XX	TLSv1.2	1785	Application Data
1254	2023-10-21 21:36:34.236450	44.XX.251.XX	192.168.XX.XX	TCP	54	587 → 56521 [ACK] Seq=6209 Ack=2885 Win=46080 Len=0
1255	2023-10-21 21:36:34.376597	44.XX.251.XX	192.168.XX.XX	TLSv1.2	152	Application Data
1256	2023-10-21 21:36:34.376776	192.168.XX.XX	44.XX.251.XX	TLSv1.2	89	Application Data
1257	2023-10-21 21:36:34.378338	192.168.XX.XX	44.XX.251.XX	TLSv1.2	85	Encrypted Alert
1267	2023-10-21 21:36:34.474518	44.XX.251.XX	192.168.XX.XX	TLSv1.2	92	Application Data
1268	2023-10-21 21:36:34.474518	44.XX.251.XX	192.168.XX.XX	TLSv1.2	85	Encrypted Alert
1269	2023-10-21 21:36:34.474569	192.168.XX.XX	44.XX.251.XX	TCP	54	56521 → 587 [RST, ACK] Seq=2952 Ack=6345 Win=0 Len=0
1270	2023-10-21 21:36:34.474636	44.XX.251.XX	192.168.XX.XX	TCP	54	587 → 56521 [FIN, ACK] Seq=6376 Ack=2920 Win=46080 Len=0
1271	2023-10-21 21:36:34.475349	44.XX.251.XX	192.168.XX.XX	TCP	54	587 → 56521 [ACK] Seq=6377 Ack=2952 Win=46080 Len=0

上記、該当箇所にてWireShark上「TLSv1.2」との表示があるが、
以下の通り「Transport Layer Security」を確認すると「TLS 1.0」となっている。

Transport Layer Security
    TLSv1.2 Record Layer: Handshake Protocol: Client Hello
        Content Type: Handshake (22)
        Version: TLS 1.0 (0x0301) ← ★TLSv1.2以上としたい
        Length: 512
        Handshake Protocol: Client Hello
            Handshake Type: Client Hello (1)
            Length: 508
            Version: TLS 1.2 (0x0303) ← ★CakePHPにパッチをあてて、TLSv1からTLSv1.2にできた
            Random: 29a218f94299a55cb124ab9aaf94b8062a4f4a2e4f69f76a6a222eca6f297a39
(以下割愛)

気になる点

  • ACMを利用しつつ、ApacheのSSLProtocolの指定は可能なのか。
    • ssl.confは現状Inclueしていない。
1回答
0

ご質問の内容より、メールの送信に、AWS SDK for PHP [1] からの SendEmail [2] API、あるいは CakePHP からの SMTP リクエスト、をご利用ではないか、と推察しております。

回答

AWS SDK for PHP をご利用の場合

PHP において、TLS v1.2 を使用するには、PHP 上で適切な HTTP クライアント設定を使用する必要があります。 コード例が資料 [3] にございますので、ご参考になれば幸いです。

資料 [3] より:

Guzzle 6 で TLS 1.2を設定する例:

use Aws\DynamoDb\DynamoDbClient;
use Aws\Handler\GuzzleV6\GuzzleHandler;
use GuzzleHttp\Client;

$handler = new GuzzleHandler(
    new Client([
        'curl' => [
            CURLOPT_SSLVERSION => CURL_SSLVERSION_TLSv1_2
        ]
    ])
);

$client = new DynamoDbClient([
    'region'  => 'us-west-2',
    'version' => 'latest',
    'http_handler' => $handler
]);

CakePHP から SMTP のリクエストをご送信されている場合

CakePHP のリリースノートを確認いたしましたところ、TLS v1.2 のサポートは CakePHP 3.5.5 で追加された [4] ものと認識しております。 そのため、お客様の CakePHP 3.4.13 では TLS v1.2 が使用不可である可能性がございます。

資料 [4] より: <<-- Network\Socket now supports explicit use of TLS1.1 and 1.2. Support for SSL2 is deprecated and will be removed in 4.0.0. -->>

また、資料 [4] によると CakePHP 3.5.5 でサポートが追加されたのは、TLS v1.2 を使用するための明示的なオプションとの記載がございます。 そのため、CakePHP 3.5.5 にてオプションの指定が必要であると存じますので、ご留意ください。

さらに、CakePHP のコード [5] を確認しましたところ、使用される TLS のバージョンは、PHP のバージョンにも依存があるようでございました。 よって、PHP のバージョンについてもご確認いただけますと幸いです。

Windows に関する補足

なお、補足ではございますが、Windows 上で TLS 1.2 の有効化に、.NET Framework の更新、及びレジストリの設定、が必要となる場合もございますので、ご留意ください。 詳細は資料 [6], [7] にございますので、必要に応じてご確認ください。

参考情報

[1] AWS SDK for PHPバージョン 3 とは - AWS SDK for PHP

https://docs.aws.amazon.com/ja_jp/sdk-for-php/v3/developer-guide/welcome.html

[2] SendEmail - Amazon Simple Email Service

https://docs.aws.amazon.com/ja_jp/ses/latest/APIReference/API_SendEmail.html

[3] http_handler - AWS SDK for PHPバージョン 3 の設定 - AWS SDK for PHP

https://docs.aws.amazon.com/ja_jp/sdk-for-php/v3/developer-guide/guide_configuration.html#http-handler

[4] CakePHP 3.5.5 Released — Bakery

https://bakery.cakephp.org/2017/11/01/cakephp_355_released.html

[5] Add support for specific TLS versions. · cakephp/cakephp@5b6b990 · GitHub

https://github.com/cakephp/cakephp/commit/5b6b990c1506849d6b20e82c22bcac012e1436f2

[6] SSL/TLS プロトコル バージョンの有効化と無効化 | Microsoft Japan Windows Technology Support Blog

https://jpwinsup.github.io/blog/2021/12/22/PublicKeyInfrastructure/SSLTLSConnection/tls-registry-settings/

[7] .NET Framework でのトランスポート層セキュリティ (TLS) のベスト プラクティス - .NET Framework | Microsoft Learn

https://learn.microsoft.com/ja-jp/dotnet/framework/network-programming/tls

資料 [4], [5], [6], [7] につきましては、外部資料となっておりますため、AWS として正当性は保証しておりません、予めご了承ください。

AWS
回答済み 6ヶ月前
  • ご回答ありがとうございます。 CakePHP から SMTP のリクエストを送信してメールを送信しています。 質問内容を更新しましたので、改めまして、ご確認・ご回答頂けますと幸甚です。

ログインしていません。 ログイン 回答を投稿する。

優れた回答とは、質問に明確に答え、建設的なフィードバックを提供し、質問者の専門分野におけるスキルの向上を促すものです。

質問に答えるためのガイドライン