いまさら感があるのですが、古いシステムを並行稼働させている場合に、サーバ側を変更すると突然「繋がらない」事件が発生します。ということで、TLS対応についてメモです。
詳細というか詳しくは下記なのですがWindows対応が非常に複雑です。
OS側
以下の3パターンがあり
- デフォルトで使えない
- Windows Server 2008 SP2
- デフォルトがv1.0で明示しないと使えない
- Windows Server 2008 R2 / Windows 7
- デフォルトでv1.1, 1.2が使える
- Windows Server 2012 / Windows 8.1
.NET Framework (開発時ターゲット)
- v1.2対応には更新プログラムが必須
- .NET Framework 3.5
- 既定値はv1.0で明示が必要
- .NET Framework 3.5(更新適用)
- .NET Framework 4.5.2
- 既定値はv1.0~1.2
- .NET Framework 4.6
- 既定値はOSデフォルト
- .NET Framework 4.7.x
- .NET Framework 4.8.x
確か明示すると非対応の場合にはサクッと落ちる問題有り。
対応方法
- 全部共通でに動かすには「TLS1.0」を明示する
- TLS1.0, 1.1 廃止に対応できない...
- パッチ対応してv1.2を明示して動かす
- Windows Sever 2008 SP2がある場合要パッチ配布
- .NET Framework 3.5を使っている場合要再ビルド
- 配布めんどい。将来の上位以降はまた考える必要がある
- 依存をなくすためにgolangで同じようなものを作り直す
- 古い機種の互換性のための新規開発の今更感
ベストプラクティス
下記リンクはベストプラクティスだそうですが、基本はアプリは.Net Framework 4.7以降を使うようにアップデートして、OS(は新しいものを使いアップデートされているのは当然なので)にプロトコル選択は最適なものが選ばれるので任せるように...という事だとは思います。
ま、そりゃそうなんですけどね。
セキュリティ系の進化が早くアップデートなども随時かけていく方向性(雰囲気)にはなっていますが、スタンドアローンアプリをユーザー環境で長期間動かすのはなかなか難しいですね。