-
-
-
高级策略表达式:解析 SSL 证书
-
This content has been machine translated dynamically.
Dieser Inhalt ist eine maschinelle Übersetzung, die dynamisch erstellt wurde. (Haftungsausschluss)
Cet article a été traduit automatiquement de manière dynamique. (Clause de non responsabilité)
Este artículo lo ha traducido una máquina de forma dinámica. (Aviso legal)
此内容已经过机器动态翻译。 放弃
このコンテンツは動的に機械翻訳されています。免責事項
이 콘텐츠는 동적으로 기계 번역되었습니다. 책임 부인
Este texto foi traduzido automaticamente. (Aviso legal)
Questo contenuto è stato tradotto dinamicamente con traduzione automatica.(Esclusione di responsabilità))
This article has been machine translated.
Dieser Artikel wurde maschinell übersetzt. (Haftungsausschluss)
Ce article a été traduit automatiquement. (Clause de non responsabilité)
Este artículo ha sido traducido automáticamente. (Aviso legal)
この記事は機械翻訳されています.免責事項
이 기사는 기계 번역되었습니다.책임 부인
Este artigo foi traduzido automaticamente.(Aviso legal)
这篇文章已经过机器翻译.放弃
Questo articolo è stato tradotto automaticamente.(Esclusione di responsabilità))
Translation failed!
高级策略表达式:解析 SSL 证书
有高级策略表达式可以解析 SSL 证书和 SSL 客户端 hello 消息。
解析 SSL 证书
您可以使用高级策略表达式来评估 X.509 安全套接字层 (SSL) 客户端证书。客户端证书是一种电子文档,可用于验证用户的身份。客户端证书至少包含版本信息、序列号、签名算法 ID、颁发者名称、有效期、主体(用户)名称、公钥和签名。
您可以检查 SSL 连接和客户端证书中的数据。例如,您可能希望将使用低强度密码的 SSL 请求发送到特定的负载平衡虚拟服务器场。以下命令是内容交换策略的示例,该策略解析请求中的密码强度并匹配小于或等于 40 的密码强度:
add cs policy p1 -rule "client.ssl.cipher_bits.le(40)"
再举一个例子,您可以配置一个策略来确定请求是否包含客户端证书:
add cs policy p2 -rule "client.ssl.client_cert exists"
或者,您可以配置检查客户端证书中特定信息的策略。例如,以下策略验证证书是否在过期前一天或多天:
add cs policy p2 -rule "client.ssl.client_cert exists && client.ssl.client_cert.days_to_expire.ge(1)"
JA3 指纹用法示例:
add ssl policy ja3_pol -rule "CLIENT.SSL.JA3_FINGERPRINT.EQ(bb4c15a90e93a25ddc16274395bce4c6)" -action reset
或者,举一个使用 patset 的 JA3 指纹的示例:
add policy patset pat1
bind policy patset pat1 bb4c15a90e93a25ddc16274395bce4c6 -index 1
bind policy patset pat1 cd3c15a90e93a25ddc16274395bce6b4 -index 2
add ssl policy ssl_ja3_pol -rule CLIENT.SSL.JA3_FINGERPRINT.contains_any("pat1") -action reset
<!--NeedCopy-->
注意
有关解析证书中的日期和时间的信息,请参阅表达 式中的日期和时间格式和 SSL 证书日期的表达式。
基于文本的 SSL 和证书数据的前缀
下表介绍了用于标识 SSL 事务和客户端证书中基于文本的项目的表达式前缀。
表 1. 返回 SSL 和客户端证书数据的文本或布尔值的前缀
前缀 | 说明 |
---|---|
CLIENT.SSL.CLIENT_CERT | 返回当前 SSL 事务中的 SSL 客户端证书。 |
CLIENT.SSL.CLIENT_CERT.TO_PEM | 以二进制格式返回 SSL 客户端证书。 |
CLIENT.SSL.CIPHER_EXPORTABLE | 如果 SSL 加密密码可导出,则返回布尔值 TRUE。 |
CLIENT.SSL.CIPHER_NAME | 如果从 SSL 连接调用,则返回 SSL 密码的名称;如果从非 SSL 连接调用,则返回 NULL 字符串。 |
CLIENT.SSL.IS_SSL | 如果当前连接是基于 SSL 的,则返回布尔值 TRUE。 |
CLIENT.SSL.JA3_FINGERPRINT | 如果配置的 JA3 指纹与客户端 hello 消息中的 JA3 指纹匹配,则返回布尔值 TRUE。注意: 此表达式在 13.1 版本 build 12.x 及更高版本中可用。 |
SSL 证书中数字数据的前缀
下表描述了用于评估 SSL 证书中日期以外的数字数据的前缀。这些前缀可以与 表达式前缀的基本操作和数字的复合运算中描述的操作一起使用。
表 2. 用于评估 SSL 证书中除日期之外的数字数据的前缀
前缀 | 说明 |
---|---|
CLIENT.SSL.CLIENT_CERT.DAYS_TO_EXPIRE | 返回证书的有效天数;对于过期的证书,返回 -1。 |
CLIENT.SSL.CLIENT_CERT.PK_SIZE | 返回证书中使用的公钥的大小。 |
CLIENT.SSL.CLIENT_CERT.VERSION | 返回证书的版本号。如果连接不是基于 SSL 的,则返回零 (0)。 |
CLIENT.SSL.CIPHER_BITS | 返回加密密钥中的位数。如果连接不是基于 SSL,则返回 0。 |
CLIENT.SSL.VERSION | 返回表示 SSL 协议版本的数字,如下所示:0。该事务不基于 SSL:0x002。该事务为 SSLv2:0x300。该事务为 SSLv3:0x301。该事务为 TLSv1:0x302。该事务为 TLS 1.1:0x303。该事务为 TLS 1.2:0x304。该事务为 TLS 1.3。 |
注意
有关与证书中的到期日期相关的 表达式,请参阅 SSL 证书日期的表达式。
SSL 证书的表达式
您可以通过配置使用以下前缀的表达式来解析 SSL 证书:
CLIENT.SSL.CLIENT_CERT
本节讨论可以为证书配置的表达式,但检查证书过期的表达式除外。基于时间的操作在 高级策略表达式:使用日期、时间和数字中进行了描述。
下表介绍了可以为 CLIENT.SSL.CLIENT_CERT 前缀指定的操作。
表 3. 可以使用 CLIENT.SSL.CLIENT_CERT 前缀指定的操作
SSL 证书操作 | 说明 |
---|---|
<certificate>.EXISTS |
如果客户端有 SSL 证书,则返回布尔值 TRUE。 |
<certificate>.ISSUER |
以名称值列表的形式返回证书中颁发者的唯一判别名 (DN)。等号 (“=”) 是名称和值的分隔符,斜杠 (“/”) 是分隔名称-值对的分隔符。以下是返回的 DN 的示例: /C=US/O=myCompany/OU=www.mycompany.com/CN=www.mycompany.com/emailAddress=myuserid@mycompany.com
|
<certificate>.ISSUER. IGNORE_EMPTY_ELEMENTS |
返回 Issuer 并忽略名称值列表中的空元素。例如,请考虑以下几点: Cert-Issuer: /c=in/st=kar//l=bangelore //o=mycompany/ou=sales/ /emailAddress=myuserid@mycompany.com 。根据前面的颁发者定义,以下重写操作返回 6 个计数: sh rewrite action insert_ssl_header Name: insert_ssl Operation: insert_http_header Target:Cert-Issuer Value:CLIENT.SSL.CLIENT_CERT.ISSUER.COUNT 。但是,如果您将值更改为以下内容,则返回的计数为 9:CLIENT.SSL.CLIENT_CERT.ISSUER.IGNORE_EMPTY_ELEMENTS.COUNT
|
<certificate>. SERIALNUMBER |
以不带前导零的大写十六进制字符串形式返回证书的序列号。例如,如果证书的序列号为 04daa1e44bd2e7769638a0058b4964bd,则以下表达式有助于匹配序列号 CLIENT.SSL.CLIENT_CERT.SERIALNUMBER.SET_TEXT_MODE(IGNORECASE).CONTAINS(\"4daa1e44bd2e7769638a0058b4964bd\")
|
|
如果客户端证书的扩展名具有匹配的 OID,则返回布尔值 TRUE。例如,如果客户端证书的扩展名为 OID 2.16.756.5.4.2.1.2.13.2.7,则表达式 client.ssl.client_cert.extensions.has_object (2.16.756.5.4.2.1.2.13.2.7) 返回 TRUE。 |
|
如果客户端证书的扩展名具有匹配的 OID 和值,则返回布尔值 TRUE。例如,如果客户端证书的扩展名为 OID 2.16.756.5.4.2.1.2.13.2.7,值为 XB,则表达式 client.ssl.client_cert.extensions.object(“2.16.756.5.4.2.1.2.13.2.7”).has_value(“XB”) 返回 TRUE。
注意事项: |
<certificate>.extensions.count |
客户证书中收到的扩展名数量。例如,如果客户端证书中的扩展名数为 16,则 expression client.ssl.client_cert.extensions.count.eq(16) 返回 TRUE |
注意:
对于标准扩展名,您可以使用众所周知的短名称而不是 OID。例如,Netscape 注释扩展名具有 OID
2.16.840.1.113730.1.13
和短名称nsComment
。您可以在扩展名中使用nsComment
,而不是2.16.840.1.113730.1.13
```
- client.ssl.client_cert.extensions.has_object(nscomment).
- client.ssl.client_cert.extensions.object(“nscomment”).has_value(“OpenSSL Generated Client Certificate”).
```
解析 SSL 客户端您好
您可以通过配置使用以下前缀的表达式来解析 SSL 客户端 hello 消息:
前缀 | 说明 |
---|---|
CLIENT.SSL.CLIENT_HELLO.CIPHERS.HAS_HEXCODE | 将表达式中提供的十六进制代码与客户端 hello 消息中收到的密码套件的十六进制代码进行匹配。 |
CLIENT.SSL.CLIENT_HELLO.CLIENT_VERSION | 客户端 hello 消息标头中收到的版本。 |
CLIENT.SSL.CLIENT_HELLO.IS_RENEGOTIATE | 如果客户端或服务器启动会话重新协商,则返回 true。 |
CLIENT.SSL.CLIENT_HELLO.IS_REUSE | 如果设备根据客户端 hello 消息中收到的非零会话 ID 重用 SSL 会话,则返回 true。 |
CLIENT.SSL.CLIENT_HELLO.IS_SCSV | 如果在客户端 hello 消息中通告信令密码套件值 (SCSV) 功能,则返回 true。后备 SCSV 的十六进制代码为 0x5600。 |
CLIENT.SSL.CLIENT_HELLO.IS_SESSION_TICKET | 如果在 client-hello 消息中播发长度为非零的会话票证扩展,则返回 true。 |
CLIENT.SSL.CLIENT_HELLO.LENGTH | 客户端 hello 消息标头中收到的长度。 |
CLIENT.SSL.CLIENT_HELLO.SNI | 返回在客户端 hello 消息的服务器名称扩展名中收到的服务器名称。 |
CLIENT.SSL.CLIENT_HELLO.ALPN.HAS_NEXTPROTOCOL | 如果客户端 hello 消息中收到的 ALPN 扩展中的应用程序协议与表达式中提供的协议匹配,则返回 true。 |
这些表达式可以在 CLIENTHELLO_REQ 绑定点使用。有关更多信息,请参阅 SSL 策略绑定。
共享
共享
This Preview product documentation is Cloud Software Group Confidential.
You agree to hold this documentation confidential pursuant to the terms of your Cloud Software Group Beta/Tech Preview Agreement.
The development, release and timing of any features or functionality described in the Preview documentation remains at our sole discretion and are subject to change without notice or consultation.
The documentation is for informational purposes only and is not a commitment, promise or legal obligation to deliver any material, code or functionality and should not be relied upon in making Cloud Software Group product purchase decisions.
If you do not agree, select I DO NOT AGREE to exit.