2011-10-27 49 views
10

Tôi muốn cấu hình Xuân @MVC còn sơ khai ứng dụng của tôi Xuân RestTemplate với SSL cho giao tiếp với REST của cơ sở https ứng dụng, mà triển khai trên Máy chủ Tomcat (Mùa xuân 3, Tomcat 7). Tôi đã thực hiện cho đến nay các tác phẩm của tôi theo số refer this link. Bây giờ tôi không có bất kỳ ý tưởng làm thế nào để sử dụng những giấy chứng nhận tạo ra với Spring RestTemplate, Bất cứ ai có thể có một số ý tưởng xin vui lòng giúp tôi. Cảm ơn. Cho đến nay những điều tôi đã làm,Làm thế nào để cấu hình mùa xuân RestTemplate với SSL (trong mùa xuân @MVC)

// Xuân An xml Configurations

<http> 
    <intercept-url pattern="/login" access="IS_AUTHENTICATED_ANONYMOUSLY" requires-channel="https"/>  
    <http-basic/></http> 

// Cấu hình cho phép SSL với Tomcat

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="200" 
    scheme="https" secure="true" SSLEnabled="true" 
    keystoreFile="C:\Users\Channa\.keystore" keystorePass="changeit" 
    clientAuth="false" sslProtocol="TLS"/> 

Đối với việc tạo ra Keys, chứng chỉ vv ,

// Tạo khách hàng một Các khóa máy chủ d:

F: \ jdk1.6.0_23 \ bin> keytool -genkey -keystore keystore_client -alias clientKey -dname "CN = localhost, OU = Dev, O = MyBusiness, L = Colombo, S = Westen , C = SL "
F: \ jdk1.6.0_23 \ bin> keytool -genkey -keystore keystore_server -alias serverKey-tên" CN = localhost, OU = Dev, O = MyBusiness, L = Colombo, S = Westen, C = SL"

// Tạo client và server chứng chỉ:

F: \ jdk1.6.0_23 \ bin> keytool -Xuất -alias clientKey -rfc -keystore keystore_client> client.cert F : \ Jdk1.6.0_23 \ bin> keytool -Xuất -alias serverKey -rfc -keystore keystore_server> server.cert

// giấy chứng nhận nhập để truststores tương ứng:

F: \ jdk1.6.0_23 \ bin> keytool -import -alias clientCert -file client.cert -keystore truststore_server F: \ jdk1.6.0_23 \ bin> keytool -import -alias serverCert -file server.cert -keystore truststore_client

// xuân RestTemplate cấu hình

<!--Http client--> 
<bean id="httpClient" class="org.apache.commons.httpclient.HttpClient"> 
    <constructor-arg ref="httpClientParams"/> 
    <property name="state" ref="httpState"/> 
</bean> 

<!--Http state--> 
<bean id="httpState" class="com.org.imc.test.stub.http.CustomHttpState"> 
    <property name="credentials" ref="usernamePasswordCredentials"/> 
</bean> 

<!--User name password credentials--> 
<bean id="usernamePasswordCredentials" class="org.apache.commons.httpclient.UsernamePasswordCredentials"/> 

<!--Http client--> 
<bean id="httpClientFactory" class="org.springframework.http.client.CommonsClientHttpRequestFactory"> 
    <constructor-arg ref="httpClient"/> 
</bean> 

<!--RestTemplate--> 
<bean id="restTemplate" class="org.springframework.web.client.RestTemplate"> 
    <constructor-arg ref="httpClientFactory"/> 
</bean> 

// Https URL sẽ truy cập

ResponseEntity<User> rECreateUser = restTemplate.postForEntity("https://127.0.0.1:8443/skeleton-1.0/login", user, User.class); 

// ngoại lệ hiện tôi nhận:

org.springframework.web.client.ResourceAccessException: I/Lỗi O: sun.security.validator.ValidatorException: Xây dựng đường dẫn PKIX không thành công: sun.security.provider.certpath.SunCertPathBuilderException: không thể tìm thấy đường dẫn chứng nhận hợp lệ cho mục tiêu được yêu cầu; lồng nhau ngoại lệ là javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX xây dựng con đường thất bại: sun.security.provider.certpath.SunCertPathBuilderException: không thể tìm thấy con đường chứng nhận hợp lệ với mục tiêu yêu cầu

Trả lời

7

Điều này là do Chứng chỉ SSL của dịch vụ bạn đang gọi không được ký bởi cơ quan cấp chứng chỉ đáng tin cậy. Giải pháp thay thế là nhập chứng chỉ vào kho lưu trữ tin cậy (cacerts) của JRE của bạn.

  1. tải xuống chứng chỉ bằng cách mở URL trong trình duyệt, nhấp vào biểu tượng khóa trong thanh địa chỉ của trình duyệt.
  2. Một khi bạn có một file cer thực hiện lệnh dưới đây

    keytool -import -keystore jdk1.8.0_77/jre/lib/security/cacerts -file ~/test.cer -alias test 
    
+3

Có thể duy trì cert khách hàng ở mức độ máy chủ ứng dụng mà không cần cấu hình ở mức java? – Eranda

+1

Bạn có thể nhập chứng chỉ vào tệp lưu trữ tin cậy tùy chỉnh, sau đó chỉ định nó như được mô tả ở đây: http://stackoverflow.com/a/18767045/157591 hoặc bạn có thể thử nghiệm với những thứ được mô tả ở đây http://stackoverflow.com/a/ 6755459/157591 –

Các vấn đề liên quan