Chrome访问本地API获取已删除证书,如何定位该证书来源
无效自签名证书来源排查方案
前置操作:获取证书唯一标识
首先从Chrome报错页导出目标证书,确认唯一特征:
- 点击地址栏左侧「不安全」提示 -> 选择「证书无效」
- 切换到「详细信息」标签页,记录证书的CommonName(公用名称)、SHA-256指纹
- 点击「导出」将证书保存为
.pem格式备用
排查步骤
1. 全局扫描证书相关文件
之前的文件名检索可能遗漏了证书内容匹配、Java专属密钥库格式的文件,执行以下命令全局扫描:
# 替换<你的SHA-256指纹前8位>为之前记录的指纹前8个字符 sudo find / -type f \( -name "*.pem" -o -name "*.crt" -o -name "*.p12" -o -name "*.jks" -o -name "*.keystore" -o -name "*.pfx" \) -exec grep -l "<你的SHA-256指纹前8位>" {} \; 2>/dev/null
同时排查JDK默认信任库/密钥库是否存在该证书,路径通常为$JAVA_HOME/jre/lib/security/cacerts,可执行以下命令查询:
# 替换<证书CommonName>为之前记录的公用名称 keytool -list -keystore $JAVA_HOME/jre/lib/security/cacerts -alias "<证书CommonName>" -storepass changeit
2. 排查服务运行配置
本地API返回证书由运行的服务进程控制,优先排查运行相关配置:
- 查看IntelliJ对应运行配置的VM参数,是否存在
-Djavax.net.ssl.keyStore=、-Dserver.ssl.key-store等SSL相关参数,确认指向的路径是否存在旧证书 - 扫描项目根目录所有配置文件(application.yml、application.properties、.env、docker-compose.yml等),检索ssl、cert、keyStore相关配置项,是否有硬编码的证书内容或未清理的旧路径
- 若本地启动了Nginx、Traefik等反向代理服务,排查代理的SSL配置,是否仍然绑定旧证书
3. 排查端口占用与残留进程
大概率存在未被杀死的旧服务进程占用目标端口,返回旧证书:
# 替换<服务端口>为你的本地API端口 sudo lsof -i :<服务端口>
对比返回的PID对应的进程是否为当前IntelliJ启动的Java进程,若不是,执行kill -9 <对应PID>杀死残留进程后重启服务即可。
4. 清理浏览器安全策略缓存
所有浏览器都报错的情况下仍然需要排查全局HSTS规则缓存:
- Chrome地址栏输入
chrome://net-internals/#hsts,在「Delete domain security policies」模块输入本地API的域名,点击删除后重启浏览器 - 执行
sudo dscacheutil -flushcache清理Mac系统DNS缓存
内容的提问来源于stack exchange,提问作者eflat
相关产品推荐
相关产品推荐

