Spring @MVCスタブアプリケーションのSpring RestTemplateを[〜#〜] ssl [〜#〜]通信先[〜#〜]レスト[〜#〜 ]ベースhttpsアプリケーション、Tomcatサーバー(Spring 3、Tomcat 7)。これまでに このリンクを参照 で私の作品を作成しました。今、私はこれらの生成された証明書をSpring RestTemplate、誰かが私を助けてくれるアイデアを持っていますか?ありがとう。今まで私がやったこと、
// Spring Security xml Configurations
<http>
<intercept-url pattern="/login" access="IS_AUTHENTICATED_ANONYMOUSLY" requires-channel="https"/>
<http-basic/></http>
// TomcatでSSLを有効にするための構成
<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"/>
鍵、証明書などを生成するために、
//クライアントとサーバーのキーを生成します:
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 -dname "CN = localhost、OU = Dev、O = MyBusiness、L = Colombo、S = Westen、C = SL 」
//クライアントとサーバーの証明書を生成:
F:\ jdk1.6.0_23\bin> keytool -export -alias clientKey -rfc -keystore keystore_client> client.cert F:\ jdk1.6.0_23\bin> keytool -export -alias serverKey -rfc -keystore keystore_server> server.cert
//対応するトラストストアに証明書をインポート:
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
// Spring RestTemplate構成
<!--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
ResponseEntity<User> rECreateUser = restTemplate.postForEntity("https://127.0.0.1:8443/skeleton-1.0/login", user, User.class);
//現在私が得た例外:
org.springframework.web.client.ResourceAccessException:I/Oエラー:Sun.security.validator.ValidatorException:PKIXパスの構築に失敗しました:Sun.security.provider.certpath.SunCertPathBuilderException:要求されたターゲットへの有効な証明書パスが見つかりません。ネストされた例外はjavax.net.ssl.SSLHandshakeExceptionです。Sun.security.validator.ValidatorException:PKIXパスの構築に失敗しました:Sun.security.provider.certpath.SunCertPathBuilderException:要求されたターゲットへの有効な証明書パスが見つかりません
これは、呼び出しているサービスのSSL証明書が信頼できる認証局によって署名されていないためです。回避策は、証明書をJREの証明書信頼ストア(cacerts)にインポートすることです。
.cerファイルを取得したら、以下のコマンドを実行します
keytool -import -keystore jdk1.8.0_77/jre/lib/security/cacerts -file ~/test.cer -alias test
Apache HttpComponents HttpClient のHttpComponentsClientHttpRequestFactoryを使用してRestTemplateを構成できます。これは、SSLを確実にサポートします。
ref: Spring LibraryのREST(RestTemplate)はHTTPSプロトコルをサポートしていますか?