在国密证书部署中,DNS验证字符串过长导致截断,根本原因在于DNS协议中单条TXT记录有255字节的长度限制。
国密证书(如SM2)的验证值通常是一个较长的Base64编码字符串,很容易超过这个限制,导致被DNS解析服务截断,最终验证失败。
一、核心解决方案
解决这个问题的标准方法是:将过长的验证字符串拆分成多个不超过255字节的片段,并存放在同一条TXT记录中。
具体操作时,需要在DNS管理后台,将同一个TXT记录的“记录值”设置为用双引号括起来的、相邻的多个字符串片段。
操作示例:
假设原始验证值为 `thisisaverylongstring...`(超过255字符),你可以将其拆分为:
```dns
记录类型:TXT
主机记录:_acme-challenge.yourdomain.com
记录值:"thisisaverylongstring...第一部分" "第二部分" "第三部分"
```
关键点:务必将其配置为**同一条TXT记录下的多个字符串**,而不是创建多条独立的TXT记录。
二、正确配置与验证
配置检查:在DNS管理后台添加记录时,确保将拆分后的多个字符串放在同一个TXT记录的输入框中。
验证方法:配置并等待DNS生效后,可通过以下命令验证,确保返回的字符串是完整的:
```bash
dig _acme-challenge.yourdomain.com TXT
```
或
```bash
nslookup -type=TXT _acme-challenge.yourdomain.com
```
三、总结
解决国密证书DNS验证字符串过长的问题,核心就是:拆分、同记录、加引号。正确操作后,CA机构的验证服务器会自动将拆分的字符串拼接起来完成验证。