Spring boot / Java、mongodb SSL / TLS接続

Gシェノイ:

Spring Boot + Mongodbを使用する2つのプロジェクトがあります。1つのプロジェクトでは、春のブートバージョンは1.4.1.RELEASEで、他のプロジェクトは2.1.3.RELEASEです。証明書、PEM形式のキーをトラストストアとキーストアにオンボードで持っています-1つのサーバー証明書チェーンと他のクライアント証明書と秘密キー。プログラムで証明書をトラストストアとキーストアにロードします。

ymlファイルに証明書パスを構成しました。このパスは、クライアントとサーバーの証明書またはキーがそれぞれ格納されるクライアントとサーバーのフォルダーで構成されます。以下に、プログラムでトラストストアとキーストアに証明書をロードするために使用するコードを示します。

final KeyStore trustStore = loadTrustStore(...); // Gets and loads server certificates
final TrustManagerFactory tmf = TrustManagerFactory.getInstance("X509");
tmf.init(trustStore);
final TrustManager[] trustManagers = tmf.getTrustManagers();

final KeyStore keyStore = loadKeyStore(...); // Gets and loads client certs and key
final KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
kmf.init(keyStore, password.toCharArray());
keyManagers = kmf.getKeyManagers();

sslContext.init(keyManagers, trustManagers, null);

上記のコードは、春のブートバージョン2.1.3.RELEASEおよび他のツール(mongodbクライアントなど)(例:studio3tまたはmongo compass)で、mongodbまたはhttpクライアント証明書でも正常に機能しますが、1.4.1.RELEASEでは、残念ながら上記のコード結果として

Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(Unknown Source)
    at java.security.cert.CertPathBuilder.build(Unknown Source)

現在、私は後のバージョンと古いバージョンの両方で見つけたAPIに違いがあります。古いバージョンのmongodb libでは、MongoClientOptions.BuilderはsocketFactoryパラメーターとしてのみ使用しますが、それ以降のバージョンではSSLContextパラメーターとして使用します。以下の両方のコードフラグメント。

spring-boot-starter-data-mongodb-1.4.1.RELEASE

final MongoClientOptions.Builder builder = MongoClientOptions.builder(config.getOptions());
final SSLContext sslContext = certificateUtil.buildSslContext(...);
builder.socketFactory(sslContext.getSocketFactory());

spring-boot-starter-data-mongodb-2.3.1.RELEASE

final MongoClientOptions.Builder builder = MongoClientOptions.builder(config.getOptions());
final SSLContext sslContext = certificateUtil.buildSslContext(...);
builder.sslContext(sslContext);

古いバージョンでMongoUriオプションを使用しようとしましたが、URIとSSL証明書を使用してmongodbに接続するドキュメントが見つからなかったため失敗しました(古いバージョンから、新しいmongodb仕様のようにTLSパラメーターを使用できませんでした)。

上記へのポインタは高く評価されています。SSLContextの方法、または必要に応じてMongoUriを参照することもできます。

Gシェノイ:

誰もがこの問題に遭遇した場合、今のところ、mongoドライバーのバージョンを3.5にアップグレードして、SSLコンテキストによるSSL / TLS構成のサポートを追加した1つの解決策を見つけました。これにより、証明書を使用してデータベースに接続できます。バージョンがデフォルトのバージョンと異なるため、私はアプリケーションの広範なテストを行います-3.2

リファレンス https://mongodb.github.io/mongo-java-driver/3.5/driver/tutorials/ssl/

POMの変更

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.mongodb</groupId>
            <artifactId>mongodb-driver</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<dependency>
   <groupId>org.mongodb</groupId>
   <artifactId>mongodb-driver</artifactId>
   <version>3.5.0</version>
</dependency>

トラストストアとキーストアにクライアントとサーバーに必要な証明書とキーを読み込んだ後、以下を使用してmongoオプション設定を使用します。

final MongoClientOptions.Builder builder = MongoClientOptions.builder(config.getOptions());
final SSLContext sslContext = certificateUtil.buildSslContext(...);
builder.sslContext(sslContext);

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Mongodb tls / ssl接続を使用したMeteorjs

JavaでのMQTTのTLS / SSL接続

SSLとSpring Bootを使用してPostgresQLに接続する方法

MySQLとSpring Bootでssl接続を閉じる際の例外の沈黙

How to resolve TLS version issue with MongoDB cluster in java Spring Boot web project?

Spring Boot と MongoDB: 常にデータベース「test」に接続

DockerでSpring BootとMongoDBを接続する

Spring BootでMongoTemplateを使用してMongoDB接続を確認する

Docker Compose + Spring Boot + Postgres接続

JavaでFTP over TLS / SSL(FTPS)サーバーに接続する方法

Spring Boot Oauth2 Client(Reactive)相互TLS / SSLトークンURI

Spring Boot TLS

Spring Boot + Jetty + SSLポート

Spring Boot SSL TCPClient〜StompBrokerRelayMessageHandler〜ActiveMQ〜Undertow

Spring BootアプリとConsul間のSSL接続が数分後に失敗するのはなぜですか?

Java SpringでMongoDB 3.0に接続する

Spring Boot mongoDB jars

Windows上のDocker、Mongodb、Spring Bootで接続拒否エラーが発生する

Spring BootとMongoDBへの接続の詳細を構成する方法は?

Spring Boot Docker コンテナを MongoDB の Docker コンテナに接続する

AES-256を使用してSpring BootでSSL(TLS)/ HTTPSを設定する方法

TLS接続エラーのあるSSL接続

Javaを使用してMySQL Amazon RDS(SSL / TLS)への安全な接続を確立する

ssl での mongodb atlas 接続の問題

Docker Compose + Spring Boot + Postgres接続、エラー

Spring-BootでのRabbitMQ接続の停止

Spring BootがRabbitMQに接続しない

Spring Boot rabbitmq接続再試行構成

Spring Boot2とRedshift接続。

TOP 一覧

  1. 1

    セレンのモデルダイアログからテキストを抽出するにはどうすればよいですか?

  2. 2

    どのように関係なく、それがどのように「悪い」、すべてのSSL証明書でのHttpClientを使用しないように

  3. 3

    Modbus Python Schneider PM5300

  4. 4

    Ansibleで複数行のシェルスクリプトを実行する方法

  5. 5

    tkinterウィンドウを閉じてもPythonプログラムが終了しない

  6. 6

    System.Data.OracleClient.OracleException:ORA-06550:行1、列7:

  7. 7

    インデックス作成時のドキュメントの順序は、Elasticsearchの検索パフォーマンスを向上させますか?

  8. 8

    scala.xmlノードを正しく比較する方法は?

  9. 9

    NGX-ブートストラップ:ドロップダウンに選択したアイテムが表示されない

  10. 10

    Elasticsearch - あいまい検索は、提案を与えていません

  11. 11

    mutate_allとifelseを組み合わせるにはどうすればよいですか

  12. 12

    Elasticsearchの場合、間隔を空けた単語を使用したワイルドカード検索

  13. 13

    Elasticsearchでサーバー操作を最適化:低いディスク透かしに対処する

  14. 14

    ラベルとエントリがpythontkinterに表示されないのはなぜですか?

  15. 15

    変数値を含むElasticSearch検索結果

  16. 16

    グラフ(.PNG)ファイルをエクスポートするZabbix

  17. 17

    STSでループプロセス「クラスパス通知の送信」のループを停止する方法

  18. 18

    Audacity:プロジェクトではなく、サウンドファイルのみを保存します

  19. 19

    Crashlytics:コンパイラー生成とはどういう意味ですか?

  20. 20

    Excelは、メモ帳データの複数の列を1つの列として解釈します

  21. 21

    ブラウザがHTMLテンプレートを解釈しない

ホットタグ

アーカイブ