Tag: client certificates

Java Rest调用具有不同的用户证书

我有一组用户证书,我想使用相应的用户证书对用户进行身份validation。 我配置服务器以启用用户身份validation。 它从浏览器工作正常。 如果有多个用户证书,它会提示我选择需要使用的证书。 我的问题是,我怎么能用java做到这一点? 我正在使用RestTemplate与服务器进行通信。 如果是单用户证书,我可以将其添加到java密钥库并使用它。 如何使用特定的用户证书进行特定的rest呼叫?

如何在Java(JSSE)中使用默认的KeyStore时提供特定的TrustStore

概观 JSSE允许用户通过指定javax.net.ssl。*参数来提供默认信任存储和密钥存储。 我想为我的应用程序提供一个非默认的TrustManager,同时允许用户像往常一样指定KeyManager,但似乎没有任何方法可以实现这一点。 细节 http://docs.oracle.com/javase/7/docs/technotes/guides/security/jsse/JSSERefGuide.html#CustomizingStores 假设在unix机器上我想允许用户使用pkcs12密钥存储区进行身份validation,而在OS XI上则希望允许用户使用系统密钥链。 在OS X上,应用程序可能会按如下方式启动: java -Djavax.net.ssl.keyStore=NONE -Djavax.net.ssl.keyStoreType=KeychainStore \ -Djavax.net.ssl.keyStorePassword=- -jar MyApplication.jar 这将正常工作:当应用程序访问需要相互身份validation(客户端证书身份validation)的https服务器时,将提示用户允许访问其钥匙串。 问题 现在假设我想将自签名证书颁发机构与我的应用程序捆绑在一起。 我可以通过构造一个TrustManagerFactory并传入一个包含我的证书( javadoc )的KeyStore来覆盖默认的信任管理器。 但是,要使用此非默认信任管理器,我需要创建并初始化SSLContext。 这里存在问题。 通过调用init(..)并传递KeyManager和TrustManager来初始化SSLContexts。 但是,使用javax.net.ssl。*参数创建KeyManager的逻辑嵌入在默认SSLContexts的实现中 – 我找不到使用默认行为获取KeyManager或KeyManagerFactory的方法,同时还指定了非默认的TrustManager或TrustManagerFactory。 因此,似乎不可能使用例如适当的操作系统特定的钥匙串实现,同时还提供用于validation远程服务器的根证书。

在spring的resttemplate发出的每个请求发送客户端证书的正确方法是什么?

我想用我的spring应用程序使用REST服务。 要访问该服务,我有一个客户端证书(自签名和.jks格式)进行授权。 对其他服务进行身份validation的正确方法是什么? 这是我的要求: public List getInfo() throws RestClientException, URISyntaxException { HttpEntity httpEntity = new HttpEntity(null, new HttpHeaders()); ResponseEntity resp = restOperations.exchange( new URI(BASE_URL + “/Info”), HttpMethod.GET, httpEntity, Info[].class); return Arrays.asList(resp.getBody()); }