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 Antwort
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
beantwortet vor 7 Monaten
  • ご回答ありがとうございます。 CakePHP から SMTP のリクエストを送信してメールを送信しています。 質問内容を更新しましたので、改めまして、ご確認・ご回答頂けますと幸甚です。

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen