我想用我的spring应用程序调用REST服务。要访问该服务,我有一个客户端证书(自签名和X.509格式)进行授权。验证其他服务的正确方法是什么?
我有两个证书文件和一个私钥,我想在每个请求中发送服务
private final String CLIENT_CERT = "C:\\Cert\\cert.cert";
private final String CLIENT_KEY = "C:\\Cert\\client.cert";
private final String LYNX_ROOT_CERT = "C:\\Cert\\root.crt";
这是我的要求:
private ResponseEntity<String> restTemplateGetForObject(UriComponentsBuilder builder,
Map<String, String> uriParams) {
HttpEntity<?> entity = getEntityWithHeaders(HttpMethod.POST);
ResponseEntity<String> resp = restTemplate.exchange(builder.buildAndExpand(uriParams).toUri(), HttpMethod.POST,
entity, String.class);
return resp;
}
public ResponseEntity<String> updateOrCreateAlarm() {
String BaseUrl = configuration.getUrl();
String port = configuration.getPort();
UriComponentsBuilder builder = UriComponentsBuilder.fromUriString(BaseUrl + ":" + port + "/api/v1/alarm");
Map<String, String> uriParams = new HashMap<String, String>();
uriParams.put("alarm_group", "LYNXKEYPRO");
uriParams.put("alarm_channel", "001");
uriParams.put("alarm_state", "ALARM");
uriParams.put("ip_address", "10.6.1.42");
uriParams.put("computer_name", "WS-B2-Lab1");
uriParams.put("version", "2");
uriParams.put("additional_text", "Custom Text to display with alarm");
return restTemplateGetForObject(builder, uriParams);
}
答案 0 :(得分:0)
1)我会创建一个信任库并将此证书添加为那里的条目。
2)启动其余客户端时,请确保信任库包含在jvm进程中。
以下是详细信息:
自签名证书(适用于Windows)。 请注意,在您的情况下,您可能已经拥有证书。只需确保它已添加到信任库中。同样在开发环境中,密钥库和信任库可以是相同的。你可以谷歌如何做到这一点。我使用了 keystore Explorer 。
cd certificate directory
"C:\Program Files\Java\jdk1.8.0_162\bin\keytool.exe" -genkey -alias signFiles -keystore badsslkeystore
badsslkeystore - 密钥库名称 assword - changeit。 -alias - 密钥库条目,在我们的例子中是signFiles。
http://java-buddy.blogspot.cz/2016/07/java-example-of-ssl-server-and-client.html
对于客户:
$ java -jar -Djavax.net.ssl.trustStore=keystore -Djavax.net.ssl.trustStorePassword=password "...JavaSSLClient.jar"
或者将它们设置为系统属性。
public static void setClientSslConfig() {
System.setProperty("javax.net.ssl.trustStore", TRUSTSTORE);//TRUSTSTORE - truststore location in the file system.
System.setProperty("javax.net.ssl.trustStorePassword", KEYSTORE_PASSWORD);
}