客户端应用程序与OSS之间的通信使用传输层安全TLS(Transport Layer Security)进行加密。 TLS是一种标准的加密协议,可确保通过互联网进行通信的客户端与服务端之间的隐私和数据完整性。您可以通过OSS服务端设置TLS版本以及加密算法套件。设置完成后,客户端仅支持使用指定的TLS版本和加密算法套件与OSS进行数据的发送和接收,以满足通信链路的安全性要求。
前提条件
RAM用户必须拥有以下权限:oss:PutTLSVersion、oss:GetTLSVersion。具体操作,请参见为RAM用户授予自定义的权限策略。
TLS版本说明
目前TLS支持四个版本,分别为1.0、1.1、1.2和1.3。各版本使用场景以及支持主流浏览器说明如下:
|
协议 |
说明 |
适用场景 |
支持的主流浏览器 |
|
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应用程序、电子商务网站、电子邮件、虚拟专用网络(VPN)等。 |
|
|
TLS 1.3 |
在安全性、性能和隐私方面进行了重大改进。删除了一些不安全的加密算法,增加了更强大的密钥交换算法和加密算法,减少了握手过程的延迟,还提供了更好的前向保密和身份验证机制。 |
对安全性要求较高、希望获得更好性能和隐私保护的场景,如金融机构、大型互联网公司、政府机构等。 |
|
注意事项
-
不建议将Bucket设置为仅允许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
以上操作方式底层基于API实现,如果您的程序自定义要求较高,您可以直接发起REST API请求。直接发起REST API请求需要手动编写代码计算签名。更多信息,请参见PutBucketHttpsConfig和GetBucketHttpsConfig。
常见问题
如何判断当前使用的TLS版本?
在客户端未指定TLS版本的情况下,您可以通过以下命令判断当前客户端与服务端之间协商使用的TLS版本。
openssl s_client -connect <Bucket>.<Endpoint>:443 -servername <Bucket>.<Endpoint>
代码示例中涉及的参数说明如下:
|
参数 |
说明 |
|
Bucket |
填写OSS Bucket名称。 |
|
Endpoint |
支持外网Endpoint、内网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版本是否设置成功?
当您的Bucket配置为仅允许TLS 1.2版本访问时,如果TLS版本设置成功,会出现以下三种情况:
-
客户端指定TLS 1.2版本时可以成功访问服务端
openssl s_client -connect <Bucket>.<Endpoint>:443 -servername <Bucket>.<Endpoint> -tls1_2代码示例中涉及的参数说明如下:
参数
说明
Bucket
填写OSS存储空间名称。
Endpoint
支持外网Endpoint、内网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 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) ---