Spring Boot相互身份验证在握手中失败

时间:2018-05-16 11:42:44

标签: java spring-boot ssl resttemplate

我在RestTemplate应用程序中嵌入了SpringBoot客户端,如下所示

@SpringBootApplication
public class SecureAppClientApplication {

    private static final Logger LOG = LoggerFactory.getLogger(SecureAppClientApplication.class);

    public static void main(String[] args) {
        SpringApplication.run(SecureAppClientApplication.class, args);
        LOG.debug("Testing connecting to secure site");
        HttpsURLConnection.setDefaultHostnameVerifier ((hostname, session) -> false);
        RestTemplate restTemp = new RestTemplate();
        String greetings = restTemp.getForObject("https://my.secure.service", String.class);
        LOG.debug("Received greetings from secured server ---> " + greetings );
    }
}

application.proerties的内容类似于

server.ssl.key-store=myKeyStore.jks
server.ssl.key-store-password=Store@123
server.ssl.key-alias=myClient
server.ssl.key-password=Key@1234
server.ssl.trust-store=cacerts
server.ssl.trust-store-password=changeit

还有其他属性,但与HTTPS无关(如Logging,JPA等)

现在,使用从浏览器(Mozilla)导出的主机证书,我在

中安装了相同的证书
  • myKeyStore.jks出现在classpath,
  • 类路径中出现的cacerts副本,
  • JDK home
  • cacerts
  • cacerts在JRE主页

我仍然得到PKIX验证错误,其根目录是

Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

不确定如何开始进行故障排除。是

  • 从浏览器中提取的证书,因为我之前使用openssl生成的X509证书进行了测试。
  • 服务器根路径;我正在尝试访问“https://host/service”,而证书只显示“https://host”的信息
  • 使用keytool -importcert -file certificate.cer -keystore keystore.jks -alias my-alias
  • 导入

更新 这似乎是一个证书问题。事实证明,从浏览器获取证书并没有多大帮助。我联系了我的服务器主机管理员,并获得了3个证书才能安装。傻我依靠浏览器证书。我猜有点像certificate chaining

结论 确保在实际使用案例中获得适当的证书,因为世界并不依赖于浏览器上可用的简单证书,尤其是对于Web服务调用。

1 个答案:

答案 0 :(得分:0)

对于这种情况,它获得了正确的证书,因为我对它们了解不多。您可能需要多个证书。