我试图调用双向SSL安全系统使用密钥和证书与RestTemplate。我使用密钥存储来配置证书和密钥。下面是生成密钥存储的步骤。
openssl pkcs12 -export -in cert.pem -inkey "privateKey.pem" -certfile cert.pem -out myProject_keyAndCertBundle.p12keytool -importkeystore -srckeystore myProject_keyAndCertBundle.p12 -srcstoretype PKCS12 -destkeystore keystore.jks.jks然后,我在我的主类上配置了它,如下所示。
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
System.setProperty("javax.net.ssl.keyStore", "keystore.jks");
System.setProperty("javax.net.ssl.keyStorePassword", "password");
System.setProperty("javax.net.ssl.keyStoreType", "JKS");
}
}它很成功。
我的问题是,有什么方法可以在application.yml中设置这个密钥存储
我试过像下面一样。但在这种情况下,我还需要一个证书来连接我的spring引导应用程序。
server:
port: 8443
ssl:
key-store: classpath:keystore.jks
key-store-password: password
security:
headers:
hsts: NONE发布于 2018-12-21 14:56:32
您在application.yml中所做的是保护您的springboot应用程序。您正在使用发给您的私钥来保护您的springboot应用程序,这是错误的。
您需要的是在进行外部服务调用之前动态加载提供给您的密钥存储库的能力,如下所示:
// Key Store
KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
kmf.init(clientKeyStore, clientKeyStorePwd);
// Trust Store
TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(serverTrustStore);
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());KeyStore部分是提供给您的密钥存储库,它包含私钥和证书链。TrustStore只包含签名私钥的CA链。
https://stackoverflow.com/questions/53874341
复制相似问题