Spring Boot SSL 客户端

新手上路,请多包涵

我是 Spring Boot 的新手。到目前为止,我很享受。我开发了一个演示 SSL REST Web 服务器,可以正确处理相互 X.509 证书身份验证。使用带有自签名客户端和服务器证书的 IE 浏览器,我测试了演示 rest web 服务器工作正常——服务器和浏览器都成功地交换和验证了彼此的证书。

我无法找到一个 SSL 客户端示例,该示例显示如何包含客户端证书并颁发 https。任何人都有一个简单的休息客户端示例来展示如何使用我的 ssl 服务器?

最好的问候,史蒂夫曼斯菲尔德

原文由 skmansfield 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 524
2 个回答

我无法让安迪提交的上述客户工作。我不断收到错误消息,说“localhost!= clientname”。无论如何,我让它正常工作。

  import java.io.IOException;

 import org.apache.commons.httpclient.HttpClient;
 import org.apache.commons.httpclient.HttpException;
 import org.apache.commons.httpclient.URI;
 import org.apache.commons.httpclient.methods.GetMethod;

 public class SSLClient {

      static
        {
          System.setProperty("javax.net.ssl.trustStore","c:/apachekeys/client1.jks");
          System.setProperty("javax.net.ssl.trustStorePassword", "password");
          System.setProperty("javax.net.ssl.keyStore", "c:/apachekeys/client1.jks");
          System.setProperty("javax.net.ssl.keyStorePassword", "password");
       }

     public static void main(String[] args) throws HttpException, IOException {

         HttpClient client = new HttpClient();
         GetMethod method = new GetMethod();
         method.setURI(new URI("https://localhost:8443/restserver", false));
         client.executeMethod(method);

         System.out.println(method.getResponseBodyAsString());

     }

 }

原文由 skmansfield 发布,翻译遵循 CC BY-SA 3.0 许可协议

鉴于您使用的是 Spring,下面的示例展示了如何使用 Spring 的 RestTemplate 和 Apache 的 HttpClient 配置了客户端证书并信任来自服务器的自签名证书:

 KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
keyStore.load(new FileInputStream(new File("keystore.jks")),
        "secret".toCharArray());
SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(
        new SSLContextBuilder()
                .loadTrustMaterial(null, new TrustSelfSignedStrategy())
                .loadKeyMaterial(keyStore, "password".toCharArray()).build());
HttpClient httpClient = HttpClients.custom().setSSLSocketFactory(socketFactory).build();
ClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(
        httpClient);
RestTemplate restTemplate = new RestTemplate(requestFactory);
ResponseEntity<String> response = restTemplate.getForEntity(
        "https://localhost:8443", String.class);

原文由 Andy Wilkinson 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题