基于OpenSSL的SSL/TLS加密套件全解析

概述

  • SSL/TLS握手时,客户端与服务端协商加密套件是很重要的一个步骤,协商出加密套件后才能继续完成后续的握手和加密通信。而现在SSL/TLS协议通信的实现,基本都是通过OpenSSL开源库,本文章就主要介绍下加密套件的含义以及如何在OpenSSL中指定加密套件。

加密套件介绍

  • SSL/TLS协议的加密套件是定义了在一次连接中所使用的各种加密算法的组合。它包括以下几个主要部分
    • 密钥交换算法:用于协商会话密钥,如RSA、DH、ECDH等。
    • 对称加密算法:用于实际数据传输的加解密,例如AES、3DES等。
    • 消息认证码(MAC)或伪随机函数(PRF):用于验证数据完整性及防止篡改,如SHA256等。

如何指定加密套件

  • 使用OpenSSL或者Nginx实现SSL/TLS协议时,都需要指定加密套件。

  • 一般指定这样指定就可以了,表示指定加密套件为任意算法,但身份认证算法和加密算法不能为空。这样客户端和服务端就会自动协商一个加密套件进行通信。

sh 复制代码
  	ssl_ciphers ALL:!aNULL;  #Nginx配置加密套件
  	SSL_CTX_set_cipher_list(ServerCTX, "ALL:!aNULL");  #openssl接口配置加密套件
  • 但如果想自己指定加密套件,就可以使用以下列表中的一种。

    序号 加密套件(完整名称) 加密套件(openssl接口指定名称) 版本 密钥协商算法 身份验证算法 加密算法 MAC
    1 TLS_AES_256_GCM_SHA384 TLS_AES_256_GCM_SHA384 TLSv1.3 any any AESGCM(256) AEAD
    2 TLS_CHACHA20_POLY1305_SHA256 TLS_CHACHA20_POLY1305_SHA256 TLSv1.3 any any CHACHA20/POLY1305(256) AEAD
    3 TLS_AES_128_GCM_SHA256 TLS_AES_128_GCM_SHA256 TLSv1.3 any any AESGCM(128) AEAD
    4 TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 ECDHE-ECDSA-AES256-GCM-SHA384 TLSv1.2 ECDH ECDSA AESGCM(256) AEAD
    5 TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 ECDH RSA AESGCM(256) AEAD
    6 TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 DHE-RSA-AES256-GCM-SHA384 TLSv1.2 DH RSA AESGCM(256) AEAD
    7 TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 ECDHE-ECDSA-CHACHA20-POLY1305 TLSv1.2 ECDH ECDSA CHACHA20/POLY1305(256) AEAD
    8 TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 ECDHE-RSA-CHACHA20-POLY1305 TLSv1.2 ECDH RSA CHACHA20/POLY1305(256) AEAD
    9 TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256 DHE-RSA-CHACHA20-POLY1305 TLSv1.2 DH RSA CHACHA20/POLY1305(256) AEAD
    10 TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 ECDHE-ECDSA-AES128-GCM-SHA256 TLSv1.2 ECDH ECDSA AESGCM(128) AEAD
    11 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 ECDH RSA AESGCM(128) AEAD
    12 TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 DHE-RSA-AES128-GCM-SHA256 TLSv1.2 DH RSA AESGCM(128) AEAD
    13 TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 ECDHE-ECDSA-AES256-SHA384 TLSv1.2 ECDH ECDSA AES(256) SHA384
    14 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 ECDHE-RSA-AES256-SHA384 TLSv1.2 ECDH RSA AES(256) SHA384
    15 TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 DHE-RSA-AES256-SHA256 TLSv1.2 DH RSA AES(256) SHA256
    16 TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 ECDHE-ECDSA-AES128-SHA256 TLSv1.2 ECDH ECDSA AES(128) SHA256
    17 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 ECDHE-RSA-AES128-SHA256 TLSv1.2 ECDH RSA AES(128) SHA256
    18 TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 DHE-RSA-AES128-SHA256 TLSv1.2 DH RSA AES(128) SHA256
    19 TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA ECDHE-ECDSA-AES256-SHA TLSv1 ECDH ECDSA AES(256) SHA1
    20 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA ECDHE-RSA-AES256-SHA TLSv1 ECDH RSA AES(256) SHA1
    21 TLS_DHE_RSA_WITH_AES_256_CBC_SHA DHE-RSA-AES256-SHA SSLv3 DH RSA AES(256) SHA1
    22 TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA ECDHE-ECDSA-AES128-SHA TLSv1 ECDH ECDSA AES(128) SHA1
    23 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA ECDHE-RSA-AES128-SHA TLSv1 ECDH RSA AES(128) SHA1
    24 TLS_DHE_RSA_WITH_AES_128_CBC_SHA DHE-RSA-AES128-SHA SSLv3 DH RSA AES(128) SHA1
    25 RSA_PSK_WITH_AES_256_GCM_SHA384 RSA-PSK-AES256-GCM-SHA384 TLSv1.2 RSAPSK RSA AESGCM(256) AEAD
    26 DHE_PSK_WITH_AES_256_GCM_SHA384 DHE-PSK-AES256-GCM-SHA384 TLSv1.2 DHEPSK PSK AESGCM(256) AEAD
    27 TLS_RSA_PSK_WITH_CHACHA20_POLY1305_SHA256 RSA-PSK-CHACHA20-POLY1305 TLSv1.2 RSAPSK RSA CHACHA20/POLY1305(256) AEAD
    28 TLS_DHE_PSK_WITH_CHACHA20_POLY1305_SHA256 DHE-PSK-CHACHA20-POLY1305 TLSv1.2 DHEPSK PSK CHACHA20/POLY1305(256) AEAD
    29 TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256 ECDHE-PSK-CHACHA20-POLY1305 TLSv1.2 ECDHEPSK PSK CHACHA20/POLY1305(256) AEAD
    30 TLS_RSA_WITH_AES_256_GCM_SHA384 AES256-GCM-SHA384 TLSv1.2 RSA RSA AESGCM(256) AEAD
    31 PSK_WITH_AES_256_GCM_SHA384 PSK-AES256-GCM-SHA384 TLSv1.2 PSK PSK AESGCM(256) AEAD
    32 TLS_PSK_WITH_CHACHA20_POLY1305_SHA256 PSK-CHACHA20-POLY1305 TLSv1.2 PSK PSK CHACHA20/POLY1305(256) AEAD
    33 RSA_PSK_WITH_AES_128_GCM_SHA256 RSA-PSK-AES128-GCM-SHA256 TLSv1.2 RSAPSK RSA AESGCM(128) AEAD
    34 DHE_PSK_WITH_AES_128_GCM_SHA256 DHE-PSK-AES128-GCM-SHA256 TLSv1.2 DHEPSK PSK AESGCM(128) AEAD
    35 TLS_RSA_WITH_AES_128_GCM_SHA256 AES128-GCM-SHA256 TLSv1.2 RSA RSA AESGCM(128) AEAD
    36 PSK_WITH_AES_128_GCM_SHA256 PSK-AES128-GCM-SHA256 TLSv1.2 PSK PSK AESGCM(128) AEAD
    37 TLS_RSA_WITH_AES_256_CBC_SHA256 AES256-SHA256 TLSv1.2 RSA RSA AES(256) SHA256
    38 TLS_RSA_WITH_AES_128_CBC_SHA256 AES128-SHA256 TLSv1.2 RSA RSA AES(128) SHA256
    39 ECDHE_PSK_WITH_AES_256_CBC_SHA384 ECDHE-PSK-AES256-CBC-SHA384 TLSv1 ECDHEPSK PSK AES(256) SHA384
    40 ECDHE_PSK_WITH_AES_256_CBC_SHA ECDHE-PSK-AES256-CBC-SHA TLSv1 ECDHEPSK PSK AES(256) SHA1
    41 RSA_PSK_WITH_AES_256_CBC_SHA384 RSA-PSK-AES256-CBC-SHA384 TLSv1 RSAPSK RSA AES(256) SHA384
    42 DHE_PSK_WITH_AES_256_CBC_SHA384 DHE-PSK-AES256-CBC-SHA384 TLSv1 DHEPSK PSK AES(256) SHA384
    43 RSA_PSK_WITH_AES_256_CBC_SHA RSA-PSK-AES256-CBC-SHA SSLv3 RSAPSK RSA AES(256) SHA1
    44 DHE_PSK_WITH_AES_256_CBC_SHA DHE-PSK-AES256-CBC-SHA SSLv3 DHEPSK PSK AES(256) SHA1
    45 TLS_RSA_WITH_AES_256_CBC_SHA AES256-SHA SSLv3 RSA RSA AES(256) SHA1
    46 PSK_WITH_AES_256_CBC_SHA384 PSK-AES256-CBC-SHA384 TLSv1 PSK PSK AES(256) SHA384
    47 PSK_WITH_AES_256_CBC_SHA PSK-AES256-CBC-SHA SSLv3 PSK PSK AES(256) SHA1
    48 ECDHE_PSK_WITH_AES_128_CBC_SHA256 ECDHE-PSK-AES128-CBC-SHA256 TLSv1 ECDHEPSK PSK AES(128) SHA256
    49 ECDHE_PSK_WITH_AES_128_CBC_SHA ECDHE-PSK-AES128-CBC-SHA TLSv1 ECDHEPSK PSK AES(128) SHA1
    50 RSA_PSK_WITH_AES_128_CBC_SHA256 RSA-PSK-AES128-CBC-SHA256 TLSv1 RSAPSK RSA AES(128) SHA256
    51 DHE_PSK_WITH_AES_128_CBC_SHA256 DHE-PSK-AES128-CBC-SHA256 TLSv1 DHEPSK PSK AES(128) SHA256
    52 RSA_PSK_WITH_AES_128_CBC_SHA RSA-PSK-AES128-CBC-SHA SSLv3 RSAPSK RSA AES(128) SHA1
    53 DHE_PSK_WITH_AES_128_CBC_SHA DHE-PSK-AES128-CBC-SHA SSLv3 DHEPSK PSK AES(128) SHA1
    54 TLS_RSA_WITH_AES_128_CBC_SHA AES128-SHA SSLv3 RSA RSA AES(128) SHA1
    55 PSK_WITH_AES_128_CBC_SHA256 PSK-AES128-CBC-SHA256 TLSv1 PSK PSK AES(128) SHA256
    56 PSK_WITH_AES_128_CBC_SHA PSK-AES128-CBC-SHA SSLv3 PSK PSK AES(128) SHA1
  • 当然也不能任意指定,指定时要看客户端是否支持。比如使用谷歌浏览器访问Nginx服务,抓包可以看到客户端支持的所有加密套件。那么服务端指定加密套件时,就只能从以下支持的加密套件中选择一个。

命令行工具

  • OpenSSL提供了命令行工具,可以查看加密套件
  • 1、查看OpenSSL支持的所有加密套件
    • openssl ciphers -v
  • 2、查看OpenSSL支持的所有加密套件,但身份验证和加密算法不能为空
    • openssl ciphers -v 'ALL:!aNULL'

参考

相关推荐
运维佬9 分钟前
在 MySQL 8.0 中,SSL 解密失败,在使用 SSL 加密连接时出现了问题
mysql·adb·ssl
vortex52 小时前
蓝队基础之网络七层杀伤链:从识别到防御的全方位策略
安全·网络安全·蓝队
清尘沐歌2 小时前
有什么好用的 WebSocket 测试工具吗?
websocket·网络协议·测试工具
清尘沐歌2 小时前
有什么好用的 WebSocket 调试工具吗?
网络·websocket·网络协议
网安_秋刀鱼3 小时前
java组件安全
web安全·网络安全·1024程序员节
earthzhang20213 小时前
《深入浅出HTTPS》读书笔记(7):安全的密码学Hash算法
网络·网络协议·http·https·1024程序员节
找藉口是失败者的习惯4 小时前
探索 HTTP 请求方法:GET、POST、PUT、DELETE 等的用法详解
网络·网络协议·http
vortex54 小时前
HTTP 协议及内外网划分详解
网络·网络协议·http·网络安全
莫轻言舞4 小时前
Java Http 接口对接太繁琐?试试 UniHttp 框架吧
网络·网络协议·http