IP的情况下,访问接口都正常,使用域名访问,报错400 badrequest
经确认,ssl配置无问题,证书文件本身无问题
最后查出来原因,是域名格式的问题,原域名中包含_,需要修改为-
排查过程:
1. 检查配置ssl:
server: port: 9443 ssl: key-store: classpath:xxx.xx.com.pfx key-store-type: PKCS12 key-store-password: ******
2. 由于程序本身经过多层中转,所以在容器内部,
vi /etc/hosts
新增本地的域名解析,如 xx.xx.xx.xx 域名.com
容器内部验证(使用IP访问正常):
curl -kv https://IP地址/test
使用域名访问
curl -kv https://域名.com/test
请求异常400 bad request
在后端程序中,新增logging.level.org.springframework.web的值为DEBUG
只有正常200请求的日志,于是再修改日志等级为TRACE
在修改为TRACE后,就发现程序在未被请求的情况下,一直报错,
SSL握手一直报错,一直重连,一直报错
精简一下:
org.apache.tomcat.util.net.NioEndpoint Error during SSL handshake java.io.IOException: Connection reset by peer java.lang.NullPointerException: null at org.apache.tomcat.util.net.SecureNioChannel.close
经过这个日志,很明显有Secure,所以我又开始考虑是否证书有问题
但是,证书已经确认过,文件本身是正常的,
于是我再修改hosts文件,将本地ip,随便加了一个域名 aa.xx.com.cn,测试接口
curl -kv https://aa.xx.com.cn/test
发现正常,于是又改成原目标域名,发现还是400 bad request
终于,想到了或许是域名格式的问题,可又想,这证书申请时,相关负责人也没有说格式异常,打回重新申请啊?
于是在百度上搜了一下"域名能不能包含下划线",搜索出来的结果表明可以包含_
所以又在bing搜了一下“Can the domain name include underscores”,结果表明不可以包含
然后又找到了官方一点的说法,
文档地址:https://www.ssl.com/faqs/underscores-not-allowed-in-domain-names/?nowprocket=1
至此,终于找到了问题原因
标签:IP,域名服务,域名,ssl,xx,报错,400,com From: https://www.cnblogs.com/uoky/p/17126437.html