2017-06-05 3 views
1

私は、BluemixでホストされているMySQL Composeサービスで完全にクラッシュするためにMySQL Workbenchを使用して成功しています。クラウドでホストされているMySQLにSpringBootを接続するSSLが必要です

私は、Apache Derbyを使用してローカルノートパソコンにSpringBootを使用して簡単なマイクロサービスを構築しました。成功しました。

私の次のステップは、BluemixでホストされているMySQL Composeを使用することでした。

私は「PKIXパスの構築に失敗しました:....」application.propertiesを編集し、このエラー に走っ 「SunCertPathBuilderException:ターゲットを要求するために有効な証明書パスを見つけることができません」

application.properties file 
spring.jpa.hibernate.ddl-auto=create 
spring.jpa.database-platform=org.hibernate.dialect.MySQLDialect 
spring.datasource.url=jdbc:mysql://somedomain:port/compose?useSSL=true?requireSSL=true 
spring.datasource.username=myname 
spring.datasource.password=mypassword 

Bluemixが私を提供jsonのこれらの資格情報:

{ 
    "db_type": "mysql", 
    "name": "bmix-dal-yp-xxxxxxx-", 
    "uri_cli": "mysql -u myname -p --host somedomain.com --port 5555 --ssl-mode=REQUIRED", 
    "ca_certificate_base64": "LS0tLS1CRUd......", 
    "deployment_id": "58fexxxxxxxxxxx", 
    "uri": "mysql://myname:[email protected]:55555/compose" 
} 

私のapplication.propertiesのどこかにca証明書を使用する予定ですか?

デフォルトでspringBootで動作する埋め込みTomcatサーバーでsslを有効にする必要がありますか?

SpringBootアプリケーションを、クラウドプロバイダに接続するように設定するにはどうすればいいですか?

Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 

答えて

0

あなたのpom.xml(または同等)に以下を追加します。

... 
<repositories> 
    <repository> 
     <id>jcenter</id> 
     <url>http://jcenter.bintray.com </url> 
     <snapshots> 
     <enabled>true</enabled> 
     <updatePolicy>never</updatePolicy> 
     <checksumPolicy>warn</checksumPolicy> 
     </snapshots> 
     <releases> 
     <enabled>true</enabled> 
     <checksumPolicy>warn</checksumPolicy> 
     </releases> 
    </repository> 
</repositories> 
... 
<dependency> 
    <groupId>com.orange.clara.cloud.boot.ssl-truststore-gen</groupId> 
    <artifactId>spring-boot-ssl-truststore-gen</artifactId> 
    <version>2.0.21</version> 
</dependency> 
... 

https://github.com/orange-cloudfoundry/spring-boot-ssl-truststore-gen

を参照してください、あなたのmanifest.ymlに詳細について

env:  
    # Add the certificate from VCAP_SERVICES ca_certificate_base64 
    # You need to base64 decode the certificate and add it below 
    # E.g. echo '<<ca_certificate_base64>>' | base64 -D 

    TRUSTED_CA_CERTIFICATE: |- 
     -----BEGIN CERTIFICATE----- 
     ... 
     -----END CERTIFICATE----- 

を次の行を追加します。

こちらの最小アプリもご覧ください:https://github.com/snowch/hello-spring-cloud/tree/8b9728a826dcc1995a7ccb19a852ac8face21147


これは私の最初の回答です。これは機能しませんでした。このセクションは無視してください。

1つのオプションは次のとおりです。

インポートのJavaトラストストア・ファイルへの証明書、Javaの アプリケーションにファイルをパックし、JAVA_OPTS環境変数を経由してそのパスを指定します。 truststoreファイルは、リソースディレクトリの下に置くことができます。これは 単一の用途に使用することができる。

  • 'CFセット-ENV' コマンドを使用することにより:

    cf set-env <app> JAVA_OPTS '-Djavax.net.ssl.TrustStore=classpath:resources/config/truststore -Djavax.net.ssl.trustStorePassword=changeit' 
    
  • または、マニフェスト使用によって。YML

    applications: 
    - name: java-app 
        ... 
        env: 
         JAVA_OPTS: '-Djavax.net.ssl.TrustStore=classpath:resources/config/truststore -Djavax.net.ssl.trustStorePassword=changeit' 
    

あなたは、例えば、あなたのトラストストアに追加する前に、それをデコードする必要がありますので、フィールドca_certificate_base64での証明書はbase64エンコードされることに注意してください

デコード証明書:

echo '<<ca_certificate_base64>>' | base64 -D > ca_certificate.pem 

がトラストの作成:キーストアの場所(リソース/設定/トラスト)とストアパス(changeitとは)JAVA_OPTSに設定されていること

keytool -import -trustcacerts -file ca_certificate.pem -alias compose_cert -keystore resources/config/truststore -storepass changeit -noprompt 

注意。

お試しできるオプションはいくつかあります。 https://discuss.pivotal.io/hc/en-us/articles/223454928-How-to-tell-application-containers-running-Java-apps-to-trust-self-signed-certs-or-a-private-or-internal-CA

+0

質問:「ca_certificate_base64」を私に提供し、それを「truststore」というファイルにデコードし、リソースフォルダ(SpringBootプロジェクト)に配置しますか? – xpagesbeast

+0

私は答えを更新しました。どのように乗り越えているか教えてください。これがうまくいかない場合は、gsubでsslを使用しないで動作する最小限の例を作成して、sslを追加して修正プログラムの動作を確認することができます。 –

+0

jdbcをsslを使用しないように変更しました。私はラップトップからクラウドデータベース(springBootプロジェクト)を完全にクラッシュできるようになりました...成功私はキーストアを作成するために書いたすべての手順に従いましたが、 JAVA_OPTS環境変数。 Tomcatが環境変数でロードするように編集する必要があるspring application.propertiesがあるか、または自分のO/S(ラップトップ)に環境変数 "global"を作成する必要がありますか?私はUbuntu Linuxワークステーションを使用しています。 – xpagesbeast

関連する問題