我必须使用在HTTPs上运行的rest服务。制作人给了我证书和方法参数。您能告诉我如何使用该服务以及如何使用代码中的证书吗。我使用的是Spring4和Java8。请分享代码片段。
如果它只是消费者验证服务身份的单向SSL,您只需将服务提供的证书(生产者证书)导入您的信任存储(CACerts文件)或编写您自己的信任管理器。
对于服务还验证客户端身份的2 Way SSL,您不仅需要验证服务的身份,还需要将您的证书发送给服务,以便服务做出决定。
下面的代码片段适用于双向SSL,但您可以通过注释将客户端证书发送到服务器的部分,轻松地将其应用于单向SSL。
// Create a trust manager that does not validate certificate chains
TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager(){
public X509Certificate[] getAcceptedIssuers(){return null;}
public void checkClientTrusted(X509Certificate[] certs, String authType){}
public void checkServerTrusted(X509Certificate[] certs, String authType){}
}};
// Install the all-trusting trust manager
RestTemplate restTemplate = new RestTemplate();
try {
String keyPassphrase = "changeit";
KeyStore keyStore = KeyStore.getInstance("jks");
keyStore.load(new FileInputStream("c:\\jks\\client.jks"), keyPassphrase.toCharArray());
KeyManagerFactory kmfactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
kmfactory.init(keyStore, keyPassphrase.toCharArray());
KeyManager[] keyManager = kmfactory.getKeyManagers();
SSLContext sc = SSLContext.getInstance("TLS");
sc.init(keyManager, trustAllCerts, new SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
HttpsURLConnection.setDefaultHostnameVerifier(new javax.net.ssl.HostnameVerifier(){
public boolean verify(String hostname,
javax.net.ssl.SSLSession sslSession) {
if (hostname.equals("localhost")) {
return true;
}
return false;
}
});
} catch (Exception e) {
;
}
System.out.println("Testing listAllUsers API-----------");
restTemplate.setErrorHandler(new ResponseErrorHandler(){
@Override
public void handleError(ClientHttpResponse rs) throws IOException {
InputStream in = rs.getBody();
String str = new String("");
int len =0;
while((len = in.available()) > 0){
byte[] bytes = new byte[len];
in.read(bytes);
str = str + new String (bytes, "UTF-8");
}
System.out.println(str);
}
@Override
public boolean hasError(ClientHttpResponse rs) throws IOException {
return false;
}
});
try{
String usersMap = restTemplate.getForObject(REST_SERVICE_URI+"/user/shailendra/", String.class);`
您可以参考下面的链接,了解使用RestTemboard使用HTTP访问RESTful服务
http://www.radcortez.com/ssl-tls-rest-server-client-with-spring-and-tomee/
使用Spring RestTemboard访问Https Rest服务
问题内容: 我有一个扩展名为’.pfx’的文件以及此证书的密码。 我需要做的是将简单的GET请求发送到Web服务并读取响应正文。 我需要实现类似于以下方法: 我还尝试使用openssl将证书转换为“无密码”格式: 因此,my方法的替代实现可能是: 非常感谢您的帮助,我花了半天的时间进行了搜索,但是我还没有找到可以帮助我的示例,似乎我在理解一些关于SSL和其他内容的基本假设时遇到了问题。 问题答案:
问题内容: 我在带ssl的Apache下有肥皂服务,而没有ssl的suds效果很好。 我有客户端证书(my.crt和user.p12文件)。 我如何配置suds客户端,使其与通过https的服务一起使用? 我没有证书 问题答案: 听起来您想使用 客户端 证书而不是某些注释中所述的 服务器 证书进行身份验证。我遇到了同样的问题,并且能够为SUDS编写自定义传输。这是对我有用的代码。 您需要PEM格式
也许我会在这里找到帮助。我想在spring boot应用程序上启用SSL。我的配置如下: 服务器:端口:8999 SSL:enabled:true key-store:classpath:keystore.jks key-store-password:mypass key-password:mypass 问题是我的密钥库。我已将*crt文件导入别名为“tomcat”的密钥存储库: 但是,我仍然无法
问题内容: 我已经开始为API编写包装,该包装要求所有请求都通过HTTPS进行。我不想在开发和测试它时向实际的API发出请求,而是希望在本地运行自己的服务器来模拟响应。 我对如何生成创建HTTPS服务器并向其发送请求所需的证书感到困惑。 我的服务器看起来像这样: Pem文件是使用以下命令生成的: 一个请求看起来像这样: 通过此设置,我得到了,所以我认为我需要为该请求添加一个选项。 所以我的问题是我
使用用户证书验证 SSH (服务端) 在以安全为前提下要保障可靠性、可控性和一致性是非常复杂的。我们可以利用 SSH 又或者说 OpenSSH 来替代所依赖的中央身份验证(比如 LDAP 或者 Kerberos) 除了 通过 PIV 和 PKCS#11 验证 SSH 之外,还可以增加远程 SSH 验证的安全性。Facebook 和 Yahoo 已经更换使用 SSH 用户证书来避免中心认证系统宕机。