web-dev-qa-db-ja.com

SSLでSpring RestTemplateを構成する方法(Spring @MVC)

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:要求されたターゲットへの有効な証明書パスが見つかりません

10
Channa

これは、呼び出しているサービスのSSL証明書が信頼できる認証局によって署名されていないためです。回避策は、証明書をJREの証明書信頼ストア(cacerts)にインポートすることです。

  1. ブラウザでURLを開いて証明書をダウンロードし、ブラウザのアドレスバーにある鍵のアイコンをクリックします。
  2. .cerファイルを取得したら、以下のコマンドを実行します

    keytool -import -keystore jdk1.8.0_77/jre/lib/security/cacerts -file ~/test.cer -alias test
    
7
Peter Szanto

Apache HttpComponents HttpClient のHttpComponentsClientHttpRequestFactoryを使用してRestTemplateを構成できます。これは、SSLを確実にサポートします。

ref: Spring LibraryのREST(RestTemplate)はHTTPSプロトコルをサポートしていますか?

2
user2767141