記事
· 2024年5月24日 4m read

Linuxで SSL/TLS を使用して JDBC 接続を行う方法

こちら の記事では、LinuxでJDBC接続を行う方法  をご紹介しました。

今回は、SSL/TLS を使用するように InterSystems IRIS スーパーサーバを構成 した IRIS に対して、JDBCで SSL/TLS 接続をする方法をご紹介します。

LinuxでJDBC接続を行う方法 の記事で紹介している手順で、SSL/TLS なしでJDBC接続できる環境を用意していることを前提にご説明します。

手順は以下のようになります。手順の詳細は、この後で説明します。


1.CA証明書を用意します

2.Java キーストアに証明書をインポートします

3.Java ファイルを含むディレクトリに、SSLConfig.properties という名前の構成ファイルを作成ます

4.Java のコードに SSL/TLS の使用を指定する設定を追加します



1.CA証明書を用意します

最初に、CA証明書を用意します。証明書に問題がないか証明書情報を確認します。
※ ***.***.***.*** :接続先IRISサーバのIPアドレス

# openssl s_client -connect ***.***.***.***:1972 -showcerts -CAfile /home/ec2-user/ca_certificate.crt < /dev/null
CONNECTED(00000003)
:
No ALPN negotiated
Early data was not sent
Verify return code: 0 (ok)
---
DONE

「Verify return code: 0 (ok)」が返れば、CA証明書に問題はありません。


2.以下のコマンドで、Java キーストアに証明書をインポートします

実行ディレクトリに keystore.jks ファイルが生成されます。

$ su -
# keytool -importcert -file /path-to-cert/ca_certificate.crt -keystore keystore.jks
Enter keystore password:              <-- 任意のパスワード
Re-enter new password:                <-- 任意のパスワード(再入力)

Trust this certificate? [no]:  yes    <-- Yes
Certificate was added to keystore
#

※keytool 実行可能ファイルは、JDK ディストリビューションに同梱されています。


3.Java ファイルのあるディレクトリに、SSLConfig.properties という名前の構成ファイルを作成します

SSLConfig.properties ファイルには、次の2つのプロパティを含めます。

trustStore=path-to-keystore/keystore.jks      <-- 2 で作成した keystore.jks のファイルパス 
trustStorePassword=keystore-password          <-- 2 で設定したパスワード

※クライアント認証が必要な場合、キーストアやその他構成ファイルの詳細については、こちら のドキュメントをご覧ください。



4.Java のコードに SSL/TLS の使用を指定する設定を追加します

※%SuperServerの設定をした接続先のIRISでは、「スーパーサーバSSL/TLSサポート」を「有効」または「必須」に設定してください。

こちらのサンプルでは、DriverManager クラスを使用した接続テスト を行います。

import java.sql.*;

public class JDBCSample_TLS {
    public static void main(String[] str) throws Exception {
        String url = "jdbc:IRIS://***.***.***.***:1972/USER/";
        
        java.util.Properties prop = new java.util.Properties();
        prop.put("connection security level", "10");    // SSL/TLS 接続にはこの設定が必要です
        prop.put("user", "_System");
        prop.put("password", "SYS");
        // Replace _SYSTEM and SYS with a username and password on your system
        Connection connection = DriverManager.getConnection(url,prop);
        
        Statement statement = connection.createStatement();
                
        String query = "SELECT top 5 TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE FROM INFORMATION_SCHEMA.TABLES";
        ResultSet resultSet = statement.executeQuery(query);
        System.out.println("Printing out contents of SELECT query: ");
        
        while (resultSet.next()) {
            System.out.println(resultSet.getString(1) + ", " + resultSet.getString(2) + ", " + resultSet.getString(3));
        }
        
        resultSet.close();
        statement.close();
        
        connection.close();
    }
}


コンパイル&実行します。

# javac JDBCSample_TLS.java
# java JDBCSample_TLS
Printing out contents of SELECT query:
%CSP_Util, CSPLogEvent, SYSTEM TABLE
%CSP_Util, Performance, SYSTEM TABLE
%Calendar, Hijri, SYSTEM TABLE
%Compiler_Informix, ConversionRule, SYSTEM TABLE
%Compiler_Informix, ImportedObject, SYSTEM TABLE


IRISDataSource を使用する場合は以下のようになります。

import com.intersystems.jdbc.*;
import java.sql.*:;

public class JDBCSample_TLS {
    public static void main(String[] str) throws Exception {
        String url = "jdbc:IRIS://***.***.***.***:1972/USER/";
        
        IRISDataSource ds = new IRISDataSource();
        ds.setURL(url);
        ds.setUser("SYS");
        ds.setPassword("_System");
        ds.setConnectionSecurityLevel(10);    // SSL/TLS 接続にはこの設定が必要です
        Connection connection = ds.getConnection();
        // 以下、DriverManager のサンプルと同じ


 

詳細は以下のドキュメントをご覧ください。
Securing the JDBC Connection with TLS

ディスカッション (0)0
続けるにはログインするか新規登録を行ってください