Transport Layer Security (TLS) は、クライアントアプリケーションと Object Storage Service (OSS) 間の通信を暗号化します。TLS は、インターネットを介して通信するクライアントとサーバーのプライバシーとデータ整合性を保証する標準的な暗号化プロトコルです。OSS で TLS バージョンと暗号スイートを設定できます。設定が完了すると、クライアントは指定された TLS バージョンと暗号スイートのみを使用して OSS と通信できます。これにより、通信リンクがセキュリティ要件を満たすことが保証されます。
前提条件
RAM ユーザーには、oss:PutTLSVersion および oss:GetTLSVersion の権限が必要です。詳細については、「RAM ユーザーへのカスタムポリシーの付与」をご参照ください。
TLS バージョン
TLS は、1.0、1.1、1.2、1.3 の 4 つのバージョンをサポートしています。各バージョンの利用シーンとサポートされているブラウザは次のとおりです。
|
プロトコル |
説明 |
利用シーン |
サポートされているブラウザ |
|
TLS 1.0 |
このバージョンでは、RSA、DES、3DES などの暗号化アルゴリズムが使用されます。TLS 1.0 には既知のセキュリティ脆弱性があり、BEAST や POODLE などの攻撃に対して脆弱です。現代のネットワーク接続に対して十分な保護を提供できなくなり、PCI DSS コンプライアンス基準を満たしていません。 |
セキュリティ脆弱性のため、TLS 1.0 はもはや広く推奨されていません。ほとんどの場合、よりセキュアな TLS バージョンにアップグレードすることを推奨します。 |
|
|
TLS 1.1 |
このバージョンでは、既知の脆弱性の一部に対処し、AES、RSA、SHA-256 などのより強力な暗号化アルゴリズムのサポートを追加することで、セキュリティが向上しています。 |
比較的高度なセキュリティが求められるが、最新の TLS 機能は必要としない環境に適しています。 |
|
|
TLS 1.2 |
このバージョンでは、セキュリティがさらに強化され、サーバ名表示 (SNI) や拡張ハンドシェイクプロトコルなどの新機能が追加されています。サポートされている暗号化アルゴリズムには、AES-GCM、AES-CBC、ECDHE などがあります。 |
Web アプリケーション、E コマースサイト、メール、仮想プライベートネットワーク (VPN) など、最も一般的なセキュアな通信シナリオに適しています。 |
|
|
TLS 1.3 |
このバージョンでは、セキュリティ、パフォーマンス、プライバシーが大幅に向上しています。安全でない暗号化アルゴリズムを削除し、より堅牢なキー交換および暗号化アルゴリズムを追加し、ハンドシェイクの遅延を削減し、より優れた前方秘匿性と認証メカニズムを提供します。 |
金融機関、大手インターネット企業、政府機関など、厳しいセキュリティ要件があり、より優れたパフォーマンスとプライバシーが求められるシナリオに適しています。 |
|
注意事項
-
バケットが TLS 1.0 または TLS 1.1 のみを許可するように設定することは避けてください。設定には、少なくとも主流バージョンである TLS 1.2 を含める必要があります。
-
TLS バージョン管理が有効になっていない場合、デフォルトで TLS 1.0、1.1、1.2 がサポートされますが、TLS 1.3 はサポートされません。TLS バージョン管理を有効にすると、TLS 1.0、1.1、1.2、1.3 から選択できます。OSS コンソールで初めて TLS バージョンを設定する場合、主流バージョンとしてデフォルトで TLS 1.2 が選択されます。TLS 1.2 が選択されていない場合、一部の主流クライアントが OSS にアクセスできなくなる可能性があります。
-
TLS バージョンをダウングレードする (たとえば、TLS 1.2 から TLS 1.1 または TLS 1.0 へ) か、TLS バージョン管理を無効にすると、セキュリティおよびコンプライアンスリスクが生じる可能性があります。注意して実行してください。
-
TLS バージョンを無効にする前に、そのバージョンにのみ依存して接続しているクライアントがないことを確認してください。
操作手順
API リファレンス
これらの操作では REST API を使用します。高度にカスタマイズされたアプリケーションの場合、REST API リクエストを直接行うことができますが、その場合は署名計算コードを手動で記述する必要があります。詳細については、「PutBucketHttpsConfig」および「GetBucketHttpsConfig」をご参照ください。
よくある質問
現在の TLS バージョンの確認
クライアントが TLS バージョンを指定していない場合、次のコマンドを実行して、クライアントとサーバー間でネゴシエートされたバージョンを特定します。
openssl s_client -connect <bucket>.<endpoint>:443 -servername <bucket>.<endpoint>
コマンドのパラメーターは次のとおりです。
|
パラメーター |
説明 |
|
bucket |
ご利用の OSS バケットの名前。 |
|
endpoint |
パブリックエンドポイント、内部エンドポイント、またはカスタムドメイン名。 |
コマンドの出力で TLS バージョンを確認できます。
応答の Protocol フィールドの値が、現在の TLS バージョンです。応答の例は次のとおりです。
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES128-GCM-SHA256
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
Protocol : TLSv1.2
Cipher : ECDHE-RSA-AES128-GCxxx
Session-ID: DF6AF8834A5BE3E9EDCxxx
Session-ID-ctx:
Master-Key: 0C25A19D6E9E3BDEC86B417125AEC1FFA85xxx
Key-Arg : None
Krb5 Principal: None
PSK identity: None
PSK identity hint: None
TLS session ticket lifetime hint: 300 (seconds)
TLS session ticket:
TLS 設定の検証
バケットが TLS 1.2 のみを許可するように正しく設定されていることを確認するには、次の動作を確認します。
-
クライアントが明示的に TLS 1.2 を使用する場合、クライアントはサーバーにアクセスできます。
openssl s_client -connect <bucket>.<endpoint>:443 -servername <bucket>.<endpoint> -tls1_2コマンドのパラメーターは次のとおりです。
パラメーター
説明
bucket
ご利用の OSS バケットの名前。
endpoint
パブリックエンドポイント、内部エンドポイント、またはカスタムドメイン名。
応答の例:
SSL handshake has read 5779 bytes and written 470 bytes --- New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES128-GCM-SHA256 Server public key is 2048 bit Secure Renegotiation IS supported Compression: NONE Expansion: NONE No ALPN negotiated SSL-Session: Protocol : TLSv1.2 Cipher : ECDHE-RSA-AES128-Gxxx Session-ID: 6F487389CA287BAFD2xxx Session-ID-ctx: Master-Key: 620777CB36570132F9xxx Key-Arg : None Krb5 Principal: None PSK identity: None PSK identity hint: None TLS session ticket lifetime hint: 300 (seconds) -
クライアントが TLS バージョンを指定しない場合 (ただし、クライアントは TLS 1.2 をサポートしている)、クライアントはサーバーにアクセスできます。
openssl s_client -connect <bucket>.<endpoint>:443 -servername <bucket>.<endpoint>応答の例:
SSL handshake has read 5779 bytes and written 470 bytes --- New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES128-GCM-SHA256 Server public key is 2048 bit Secure Renegotiation IS supported Compression: NONE Expansion: NONE No ALPN negotiated SSL-Session: Protocol : TLSv1.2 Cipher : ECDHE-RSA-AES128-Gxxx Session-ID: 6F487389CA287BAFD2xxx Session-ID-ctx: Master-Key: 620777CB36570132F9xxx Key-Arg : None Krb5 Principal: None PSK identity: None PSK identity hint: None TLS session ticket lifetime hint: 300 (seconds) -
サーバーは、TLS 1.2 以外の TLS バージョン (たとえば、TLS 1.1) を指定するクライアントからの接続を拒否します。
openssl s_client -connect <bucket>.<endpoint>:443 -servername <bucket>.<endpoint> -tls1_1応答の例:
[root@i-xxx xxx ~]# openssl s_client -connect xxx.oss-cn-hangzhou.aliyuncs.com:443 -servername xxx.oss-cn-hangzhou.aliyuncs.com -tls1_1 CONNECTED(00000003) 140293333579664:error:1409442E:SSL routines:ssl3_read_bytes:tlsv1 alert protocol version:s3_pkt.c:1493:SSL alert number 70 140293333579664:error:1409E0E5:SSL routines:ssl3_write_bytes:ssl handshake failure:s3_pkt.c:659: --- no peer certificate available --- No client certificate CA names sent --- SSL handshake has read 7 bytes and written 0 bytes --- New, (NONE), Cipher is (NONE) Secure Renegotiation IS NOT supported Compression: NONE Expansion: NONE No ALPN negotiated SSL-Session: Protocol : TLSv1.1 Cipher : 0000 Session-ID: Session-ID-ctx: Master-Key: Key-Arg : None Krb5 Principal: None PSK identity: None PSK identity hint: None Start Time: 1692262610 Timeout : 7200 (sec) Verify return code: 0 (ok) ---