searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

ssl_ciphers 配置详解

2024-11-18 09:21:52
783
0

一、配置方式

         ssl_ciphers ciphers;

默认值:ssl_ciphers HIGH:!aNULL:!MD5;

上下文:http,server

作用:设置服务器建立与客户端请求https连接时,服务器可支持的ssl加密套件,可避免使用不安全的过时的加密算法。ssl_ciphers配置项的可选值由nginx编译时,引用的openssl组件 的ciphers定义。不同版本的openssl组件,可支持的加密套件也有所区别。

 

二、可选值详解

     ssl_ciphers指令取值依赖于openssl库,因此可以直接用openssl工具来更方便的查看加密套件,验证取值。指令如下:

     openssl ciphers [-v] [-ssl2] [-ssl3] [-tls1] [cipherlist]  

          -v:详细列出所有加密套件。包括ssl版本(SSLv2、SSLv3以及 TLS)、密钥交换算法、身份验证算法、对称算法、摘要算法。
          -ssl2:只列出SSLv2使用的加密套件。
          -ssl3:只列出SSLv3使用的加密套件。
          -tls1:只列出tls使用的加密套件。
          cipherlist:列出一个cipher list的详细内容。用此项能列出所有符合规则的加密套件,如果不加-v选项,它只显示各个套件名字;

2.1 算法列表(cipherlist)格式

    算法列表包含一个或多个冒号隔开的<cipher strings>。逗号或空格是可接受的分隔符,但是冒号是普遍使用的。

    真实的算法字符串可以是不同算法组件的组合。也可以包含一个简单的算法组件,例如AES256-RSA256。

    之后示例中B<>表示强调<>内的内容是算法列表符号,真实值为<>内的内容。

    一个算法组件包含某几个算法,或者算法套件的几个类型值。例如B<SHA1>代表所有的算法套件中的摘要算法为SHA1;B<SSLv3>代表所有的SSL v3相关的算法。

    一个算法组件可以用B<+>字符把简单的算法字符连接起来。这是一个符合逻辑的B<and>操作。例如,B<SHA1+DES>代表所有同时包含SHA1和DES的算法套件。可以在每个算法字符串之前使用字符B<!>、B<->或 B<+>。

    如果使用字符B<!>,则从算法列表中删除该算法。根据明确的规定,删除了的算法将不会再出现。

    如果使用字符B<->,则从算法列表中删除该算法。但是可以通过后面的选项将一个或所有的算法可以被再次添加。

    如果使用字符B<+>,则将该算法移到算法列表的末尾。这个选项不会添加任何新的算法,它只是紧紧的移动匹配的已经存在的算法。

    如果没有上述字符被提出,则该字符串则作为一个算法列表中的一部分则仅仅被解释。如果这个列表包含的算法已经被删除,则他们将被忽略:因为他们不会被移到列表的末尾。

    此外,算法字符串B<@STRENGTH>可以被用于到分类,可以让符合条件的算法按加密算法的长度分类(输出时会聚合在一起)。

2.2 取值

    下面是合法的算法字符串以及他们的详细解释:

    B<DEFAULT>:默认的算法列表。这个在编译的时候决定,OpenSSL1.0.0以上的版本默认的是B<ALL:!aNULL:!eNULL>。这个必须是第一个有详细说明的算法字符串。

    B<COMPLEMENTOFDEFAULT>:这个算法包含B<ALL>,但没有被默认激活。目前它的值是B<ADH>。需要注意的是这个规则不包括B<eNULL>(它不被包含在B<ALL>中)。

    B<ALL>:所有的算法套件但是不包括B<eNULL>算法,因为B<eNULL>算法必须被明确的激活。作为OpenSSL的一部分,B<ALL>算法套件被合理的被设置为默认算法套件。

    B<COMPLEMENTOFALL>:这个算法套件不激活B<ALL>,目前仅仅包含B<eNULL>算法。

    B<HIGH>:"high"加密算法套件。目前意味着密钥长度值大于128位,目前一些算法套件是128字节的密钥。

    B<MEDIUM>:"medium"加密算法套件。目前一些算法套件是128字节的加密。

    B<LOW>:"low"加密算法套件。目前使用64位或56位密钥的加密算法,但是不包括export系列的算法套件。

    B<EXP>, B<EXPORT>:export系列的加密算法。包含40字节和56字节的算法。

    B<EXPORT40>:40字节的加密算法。

    B<EXPORT56>:56字节的加密算法。在OpenSSL0.9.8c版本以后后面的版本中56字节的export算法是空的,除非OpenSSL明确的表明支持实验性的算法。

    B<eNULL>,B<NULL>:"NULL"类型的算法,它表明不用进行任何加密操作。如果要显示包含的数据则存在一些安全风险。

    B<aNULL>:算法套件中没有验证算法。当前它是一个匿名的DH算法。这些算法套件是易受到中间攻击的,于是不建议使用它。

    B<kRSA>, B<RSA>:用RSA密钥来进行密钥交换。

    B<kEDH>:使用短暂的DH密钥协议。

    B<kDHr>, B<kDHd>:算法套件使用DH密钥协议和CA分别用RSA和DSS密钥签名的DH证书。目前没有进行运用。

    B<aRSA>:用RSA密钥来执行验证操作。证书携带RSA密钥。

    B<aDSS>, B<DSS>:用DSS密钥来执行验证操作。证书携带DSS密钥。

    B<aDH>:用DH密钥来执行验证操作。证书携带DH密钥。目前没有进行运用。

    B<kFZA>, B<aFZA>, B<eFZA>, B<FZA>:用FORTEZZA密钥来进行密钥交换、验证、加密。目前没有进行运用。

    B<TLSv1>, B<SSLv3>, B<SSLv2>:TLS v1.0, SSL v3.0 or SSL v2.0算法套件。

    B<DH>:算法套件使用DH算法,包括匿名的DH。

    B<ADH>:匿名的DH算法套件。

    B<AES>:算法套件使用AES算法。

    B<CAMELLIA>:算法套件使用CAMELLIA算法。

    B<3DES>:算法套件使用3des算法。

    B<DES>:算法套件使用des算法。

    B<RC4>:算法套件使用rc4算法。

    B<RC2>:算法套件使用rc2算法。

    B<IDEA>:算法套件使用IDEA算法。

    B<SEED>:算法套件使用SEED算法。

    B<MD5>:算法套件使用MD5算法。

    B<SHA1>, B<SHA>:算法套件使用SHA算法。

    B<aGOST>:算法套件使用GOST R 34.10 (either 2001 or 94)来执行验证操作(需要一个支持GOST算法的硬件引擎)。

    B<aGOST94>:算法套件使用GOST R 34.10-94来执行验证操作(注意R 34.10-94的标准已经过期了,建议使用GOST R 34.10-2001)。

    B<kGOST>:用VKO 34.10来执行密钥交换操作。在RFC4357中指定。

    B<GOST94>:算法套件,用基于GOST R 34.11-94的HMAC算法。

    B<GOST89MAC>:算法套件,用GOST 28147-89摘要算法来代替HMAC。

2.3 实测

   cipherlist部分用单引号包含字符串,避免!被 bash转义 

Kx  密钥交换算法  :用来协商回话密钥
Au 验证算法 :用来验证服务端身份
Enc对称加密算法:加密消息
Mac摘要算法:防消息篡改

 

支持RSA的所有算法套件

 

ssl_ciphers 默认取值包含的算法

 

三、验证方式

  通过以上说明,可以配置一条符合客户需求的加密套件取值,之后就需要进行算法的验证,看是否符合客户需求

  可以通过如下命令,请求nginx,看加密条件是否符合预期

  openssl s_client -cipher <cipherlist> -connect <ip:port> -servername <domain>

如上说明,服务器不支持该算法套件

 

如上说明 本地的openssl工具不包含该算法套件,可能属于淘汰已废弃,也可能算法属于实验性算法,未包含。注意openssl工具与nginx使用的openssl组件,可能版本不一致,包含的算法套件有所差别。

 

如上表示服务器支持该加密套件

0条评论
0 / 1000
李****壮
4文章数
0粉丝数
李****壮
4 文章 | 0 粉丝
原创

ssl_ciphers 配置详解

2024-11-18 09:21:52
783
0

一、配置方式

         ssl_ciphers ciphers;

默认值:ssl_ciphers HIGH:!aNULL:!MD5;

上下文:http,server

作用:设置服务器建立与客户端请求https连接时,服务器可支持的ssl加密套件,可避免使用不安全的过时的加密算法。ssl_ciphers配置项的可选值由nginx编译时,引用的openssl组件 的ciphers定义。不同版本的openssl组件,可支持的加密套件也有所区别。

 

二、可选值详解

     ssl_ciphers指令取值依赖于openssl库,因此可以直接用openssl工具来更方便的查看加密套件,验证取值。指令如下:

     openssl ciphers [-v] [-ssl2] [-ssl3] [-tls1] [cipherlist]  

          -v:详细列出所有加密套件。包括ssl版本(SSLv2、SSLv3以及 TLS)、密钥交换算法、身份验证算法、对称算法、摘要算法。
          -ssl2:只列出SSLv2使用的加密套件。
          -ssl3:只列出SSLv3使用的加密套件。
          -tls1:只列出tls使用的加密套件。
          cipherlist:列出一个cipher list的详细内容。用此项能列出所有符合规则的加密套件,如果不加-v选项,它只显示各个套件名字;

2.1 算法列表(cipherlist)格式

    算法列表包含一个或多个冒号隔开的<cipher strings>。逗号或空格是可接受的分隔符,但是冒号是普遍使用的。

    真实的算法字符串可以是不同算法组件的组合。也可以包含一个简单的算法组件,例如AES256-RSA256。

    之后示例中B<>表示强调<>内的内容是算法列表符号,真实值为<>内的内容。

    一个算法组件包含某几个算法,或者算法套件的几个类型值。例如B<SHA1>代表所有的算法套件中的摘要算法为SHA1;B<SSLv3>代表所有的SSL v3相关的算法。

    一个算法组件可以用B<+>字符把简单的算法字符连接起来。这是一个符合逻辑的B<and>操作。例如,B<SHA1+DES>代表所有同时包含SHA1和DES的算法套件。可以在每个算法字符串之前使用字符B<!>、B<->或 B<+>。

    如果使用字符B<!>,则从算法列表中删除该算法。根据明确的规定,删除了的算法将不会再出现。

    如果使用字符B<->,则从算法列表中删除该算法。但是可以通过后面的选项将一个或所有的算法可以被再次添加。

    如果使用字符B<+>,则将该算法移到算法列表的末尾。这个选项不会添加任何新的算法,它只是紧紧的移动匹配的已经存在的算法。

    如果没有上述字符被提出,则该字符串则作为一个算法列表中的一部分则仅仅被解释。如果这个列表包含的算法已经被删除,则他们将被忽略:因为他们不会被移到列表的末尾。

    此外,算法字符串B<@STRENGTH>可以被用于到分类,可以让符合条件的算法按加密算法的长度分类(输出时会聚合在一起)。

2.2 取值

    下面是合法的算法字符串以及他们的详细解释:

    B<DEFAULT>:默认的算法列表。这个在编译的时候决定,OpenSSL1.0.0以上的版本默认的是B<ALL:!aNULL:!eNULL>。这个必须是第一个有详细说明的算法字符串。

    B<COMPLEMENTOFDEFAULT>:这个算法包含B<ALL>,但没有被默认激活。目前它的值是B<ADH>。需要注意的是这个规则不包括B<eNULL>(它不被包含在B<ALL>中)。

    B<ALL>:所有的算法套件但是不包括B<eNULL>算法,因为B<eNULL>算法必须被明确的激活。作为OpenSSL的一部分,B<ALL>算法套件被合理的被设置为默认算法套件。

    B<COMPLEMENTOFALL>:这个算法套件不激活B<ALL>,目前仅仅包含B<eNULL>算法。

    B<HIGH>:"high"加密算法套件。目前意味着密钥长度值大于128位,目前一些算法套件是128字节的密钥。

    B<MEDIUM>:"medium"加密算法套件。目前一些算法套件是128字节的加密。

    B<LOW>:"low"加密算法套件。目前使用64位或56位密钥的加密算法,但是不包括export系列的算法套件。

    B<EXP>, B<EXPORT>:export系列的加密算法。包含40字节和56字节的算法。

    B<EXPORT40>:40字节的加密算法。

    B<EXPORT56>:56字节的加密算法。在OpenSSL0.9.8c版本以后后面的版本中56字节的export算法是空的,除非OpenSSL明确的表明支持实验性的算法。

    B<eNULL>,B<NULL>:"NULL"类型的算法,它表明不用进行任何加密操作。如果要显示包含的数据则存在一些安全风险。

    B<aNULL>:算法套件中没有验证算法。当前它是一个匿名的DH算法。这些算法套件是易受到中间攻击的,于是不建议使用它。

    B<kRSA>, B<RSA>:用RSA密钥来进行密钥交换。

    B<kEDH>:使用短暂的DH密钥协议。

    B<kDHr>, B<kDHd>:算法套件使用DH密钥协议和CA分别用RSA和DSS密钥签名的DH证书。目前没有进行运用。

    B<aRSA>:用RSA密钥来执行验证操作。证书携带RSA密钥。

    B<aDSS>, B<DSS>:用DSS密钥来执行验证操作。证书携带DSS密钥。

    B<aDH>:用DH密钥来执行验证操作。证书携带DH密钥。目前没有进行运用。

    B<kFZA>, B<aFZA>, B<eFZA>, B<FZA>:用FORTEZZA密钥来进行密钥交换、验证、加密。目前没有进行运用。

    B<TLSv1>, B<SSLv3>, B<SSLv2>:TLS v1.0, SSL v3.0 or SSL v2.0算法套件。

    B<DH>:算法套件使用DH算法,包括匿名的DH。

    B<ADH>:匿名的DH算法套件。

    B<AES>:算法套件使用AES算法。

    B<CAMELLIA>:算法套件使用CAMELLIA算法。

    B<3DES>:算法套件使用3des算法。

    B<DES>:算法套件使用des算法。

    B<RC4>:算法套件使用rc4算法。

    B<RC2>:算法套件使用rc2算法。

    B<IDEA>:算法套件使用IDEA算法。

    B<SEED>:算法套件使用SEED算法。

    B<MD5>:算法套件使用MD5算法。

    B<SHA1>, B<SHA>:算法套件使用SHA算法。

    B<aGOST>:算法套件使用GOST R 34.10 (either 2001 or 94)来执行验证操作(需要一个支持GOST算法的硬件引擎)。

    B<aGOST94>:算法套件使用GOST R 34.10-94来执行验证操作(注意R 34.10-94的标准已经过期了,建议使用GOST R 34.10-2001)。

    B<kGOST>:用VKO 34.10来执行密钥交换操作。在RFC4357中指定。

    B<GOST94>:算法套件,用基于GOST R 34.11-94的HMAC算法。

    B<GOST89MAC>:算法套件,用GOST 28147-89摘要算法来代替HMAC。

2.3 实测

   cipherlist部分用单引号包含字符串,避免!被 bash转义 

Kx  密钥交换算法  :用来协商回话密钥
Au 验证算法 :用来验证服务端身份
Enc对称加密算法:加密消息
Mac摘要算法:防消息篡改

 

支持RSA的所有算法套件

 

ssl_ciphers 默认取值包含的算法

 

三、验证方式

  通过以上说明,可以配置一条符合客户需求的加密套件取值,之后就需要进行算法的验证,看是否符合客户需求

  可以通过如下命令,请求nginx,看加密条件是否符合预期

  openssl s_client -cipher <cipherlist> -connect <ip:port> -servername <domain>

如上说明,服务器不支持该算法套件

 

如上说明 本地的openssl工具不包含该算法套件,可能属于淘汰已废弃,也可能算法属于实验性算法,未包含。注意openssl工具与nginx使用的openssl组件,可能版本不一致,包含的算法套件有所差别。

 

如上表示服务器支持该加密套件

文章来自个人专栏
文章 | 订阅
0条评论
0 / 1000
请输入你的评论
0
0