Java 是否可以在没有信任库的情况下在客户端实现MTL?

Java 是否可以在没有信任库的情况下在客户端实现MTL?,java,security,ssl,ssl-certificate,resttemplate,Java,Security,Ssl,Ssl Certificate,Resttemplate,我一直在实现一个restTemplate,它向一个受MTL保护的服务器发送帖子。我在Springboot中实现了以下bean。简单地说,我为restTemplate提供了一个密钥库和一个信任库(.jks格式)来实现双向ssl连接,但我不需要使用信任库,而是需要检查服务器证书的某些字段来验证它 @Bean @Autowired public RestTemplate mtlsRestTemplate(KeyStore keystore) throws IOException, Unrecovera

我一直在实现一个restTemplate,它向一个受MTL保护的服务器发送帖子。我在Springboot中实现了以下bean。简单地说,我为restTemplate提供了一个密钥库和一个信任库(.jks格式)来实现双向ssl连接,但我不需要使用信任库,而是需要检查服务器证书的某些字段来验证它

@Bean
@Autowired
public RestTemplate mtlsRestTemplate(KeyStore keystore) throws IOException, UnrecoverableKeyException, KeyManagementException {
    if (!isMtlsActivated) {
        return classicRestTemplate();
    }
    SSLContext context;
    try {
        context = SSLContextBuilder.create()
                .setProtocol("TLS")
                .loadKeyMaterial(keystore, keyStorePassword.toCharArray())
                .loadTrustMaterial(new File(trustStoreLocation), trustStorePassword.toCharArray())
                .build();
    } catch (CertificateException | NoSuchAlgorithmException | KeyStoreException e) {
        // [...]
    }

    HttpComponentsClientHttpRequestFactory clientHttpRequestFactory = new HttpComponentsClientHttpRequestFactory(HttpClients.custom().setSSLSocketFactory(
            new SSLConnectionSocketFactory(context, NoopHostnameVerifier.INSTANCE))
            .setMaxConnTotal(maxConnectionsTotal)
            .setMaxConnPerRoute(maxConnectionsPerRoute)
            .build());
    clientHttpRequestFactory.setConnectTimeout(5000);
    clientHttpRequestFactory.setReadTimeout(5000);
    return new RestTemplate(clientHttpRequestFactory);
}
我的需要来自服务器策略,当涉及到更新他们的证书时。此任务将经常执行,这将迫使我不断手动检查和上载新证书(因为此操作无法自动化)。我一直在读,在使用Spring安全性的服务器端,您可以发送自己的证书,然后检查客户端证书的cn(例如在其他地方)。当使用my bean生成的RestTemplate的
.exchange()
方法时,是否有任何方法可以检查cn(或dn,或任何其他字段,不确定最安全的字段)

Edit1:我一直在尝试,我已经能够创建一个实现
CertificateTrustStrategy
的类,并以信任库初始化的相同方式将其加载为信任材料,但我不知道除了DN之外如何检查证书的有效性。我忘了解释我不能使用CA证书(客户端证书)进行检查,但是,我可以使用不会更改的字段进行检查,如果CA更改其证书