SEC_E_INVALID_TOKEN (0x80090308) Jetty HTTPS Servlet访问报错解决方案咨询
问题根因及修复方案
1. 证书生成脚本存在拼写错误
执行证书签名请求生成步骤时别名拼写错误:
原脚本行 keytool -keystore keystore.jks -storepass P4ssW0rd -certreq -alias exmaple -file cert-file 中,exmaple为笔误,生成密钥对时使用的别名是example,拼写错误会导致生成的证书请求与原有私钥不匹配。
2. 签名后证书导入别名不匹配
导入CA签名后的证书时使用的别名是metahost,需要和原有密钥对的别名example保持一致,否则Jetty加载keystore时无法匹配到对应的私钥与证书链,导致SSL握手失败。
3. 客户端访问配置说明
- 本地测试访问
example.com前,需要先在本机hosts文件中添加127.0.0.1 example.com映射,确保域名解析到本地Jetty服务。 - 浏览器需要提前导入生成的
ca-cert根证书到受信任的根证书颁发机构列表,否则会报不安全提示;curl请求时需要添加--cacert ca-cert参数指定根证书才能正常访问。
修正后的证书生成脚本
keytool -keystore keystore.jks -storepass P4ssW0rd -keypass P4ssW0rd -genkey -alias example -validity 365 -dname "CN=example,OU=Example,O=Example,L=Bratislava,ST=Slovakia,C=SK" -ext "SAN=DNS:example.com,DNS:www.example.com,DNS:test.example.com" "C:\Program Files\Git\usr\bin\openssl.exe" req -new -x509 -subj "/C=SK/ST=Slovakia/L=Bratislava/O=Example/OU=Example/CN=Root-CA" -keyout ca-key -out ca-cert -days 365 -passout pass:P4ssW0rd keytool -keystore truststore.jks -storepass P4ssW0rd -import -alias ca-root -file ca-cert -noprompt :: 修正别名拼写错误 keytool -keystore keystore.jks -storepass P4ssW0rd -certreq -alias example -file cert-file echo [SAN] > extFile echo subjectAltName=DNS:example.com,DNS:www.example.com,DNS:test.example.com >> extFile "C:\Program Files\Git\usr\bin\openssl.exe" x509 -req -CA ca-cert -CAkey ca-key -in cert-file -out test.pem -days 365 -CAcreateserial -passin pass:P4ssW0rd -extensions SAN -extfile extFile keytool -keystore keystore.jks -storepass P4ssW0rd -import -alias ca-root -file ca-cert -noprompt :: 修正导入别名,和原有私钥别名保持一致 keytool -keystore keystore.jks -storepass P4ssW0rd -import -alias example -file test.pem pause
Jetty代码验证
你提供的Jetty启动代码逻辑无错误,使用修正后的keystore和truststore重新启动服务即可正常运行。
内容的提问来源于stack exchange,提问作者CooderSK
相关产品推荐
相关产品推荐

