CachéDBMSでSSL / TLSを使用する

この記事では、CachéSSLベースのDBMSへの安全な接続を設定するいくつかの例のみを検討します。





Note:CachéDBMSでSSLを使用する他の例は、ミラーリング、Telnet、TCP / IP(ソケット)、Webサービス、Cachéスタジオなどです。 - ドキュメントまたはテクニカルサポートで見つけることができます。
まず、証明書(ルート(CA:認証局)、サーバー、クライアント)を生成しましょう。

証明書を生成/取得するプロセスはかなり複雑であり、この記事の範囲外であるため、ここでは詳しく説明しません。

インターネットでは、このトピックに関する多くの資料を見つけることができます。例: 電子署名

注:eTokenは望ましいですが、必須ではありません。


一連のテストデジタル証明書の生成



テスト証明書の生成、署名、検証、および失効のプロセスを簡素化するために、一連のバットスクリプトが用意されています。 自由に変更できます。 詳細については、対応するファイルを参照してください。



それでは、証明書を作成しましょう。

  1. パスワードなしで秘密鍵を生成します。 必要に応じて、たとえば-aes256パラメーターを追加することにより、パスワードで保護できます。
    openssl genrsa -out cakey.pem -rand randfile 4096 openssl genrsa -out serverkey.pem -rand randfile 2048 openssl genrsa -out clientkey.pem -rand randfile 2048
          
          





  2. 認証要求を作成します。 対応するファイルからリクエストのデータを取得します。
     openssl req -new -key cakey.pem -config cfgCA.txt -out cacsr.pem openssl req -new -key serverkey.pem -config cfgServer.txt -out servercsr.pem openssl req -new -key clientkey.pem -config cfgClient.txt -out clientcsr.pem
          
          





  3. 証明書の作成と署名:
     openssl x509 -req -signkey cakey.pem -in cacsr.pem -extfile cfgCA.txt -extensions v3_req -out cacrt.pem -days 365 openssl ca -config ca.config -extensions v3_server -in servercsr.pem -out servercrt.pem -batch openssl ca -config ca.config -extensions v3_client -in clientcsr.pem -out clientcrt.pem -batch
          
          





  4. Windowsの.NET、eToken、証明書ストアに適したDER形式に証明書をトランスコードします。 エクスポート用のパスワードは空白のままにできます。
     openssl x509 -inform PEM -in cacrt.pem -outform DER -out ca.cer openssl x509 -inform PEM -in servercrt.pem -outform DER -out server.cer openssl x509 -inform PEM -in clientcrt.pem -outform DER -out client.cer openssl pkcs12 -export -in cacrt.pem -inkey cakey.pem -out ca.pfx -name "CA certificate CACHE" openssl pkcs12 -export -in servercrt.pem -inkey serverkey.pem -out server.pfx -name "Server certificate CACHE" openssl pkcs12 -export -in clientcrt.pem -inkey clientkey.pem -out client.pfx -name "Client certificate CACHE"
          
          





  5. クライアント証明書のいずれかを失効させます(オプション)。 失効した証明書のリストを再作成します。
     rem openssl ca -config ca.config -revoke clientcrt.pem openssl ca -config ca.config -gencrl -out crl.pem openssl crl -outform DER -in crl.pem -out crl.crl -CAfile cacrt.pem copy crl.crl C:\Inetpub\wwwroot\crl.crl
          
          





  6. 証明書の内容をファイルに印刷して読みやすくします。
     openssl x509 -in cacrt.pem -noout -text >ca.log openssl x509 -in servercrt.pem -noout -text >server.log openssl x509 -in clientcrt.pem -noout -text >client.log openssl crl -in crl.pem -text -noout
          
          





  7. 証明書の有効性を確認します。
     openssl verify -CAfile cacrt.pem servercrt.pem clientcrt.pem
          
          





ca.configファイルの内容:

 [ca] default_ca=CA_CLIENT [CA_CLIENT] dir=./db certs = $dir/certs new_certs_dir = $dir/newcerts database = $dir/index.txt serial = $dir/serial certificate = ./cacrt.pem private_key = ./cakey.pem default_days = 365 default_crl_hours = 4 default_md = sha1 policy = policy_anything #     [policy_anything] countryName = optional stateOrProvinceName = optional localityName = optional organizationName = optional organizationalUnitName = optional commonName = supplied emailAddress = optional serialNumber = optional [v3_server] basicConstraints = critical,CA:false nsComment = "Server certificate CACHE" nsCertType = server keyUsage = critical,digitalSignature, nonRepudiation, keyEncipherment, keyAgreement crlDistributionPoints = URI:http://localhost/crl.crl [v3_client] subjectAltName = email:copy basicConstraints = critical,CA:false nsComment = "Client certificate CACHE" nsCertType = client, email, objsign keyUsage = critical,digitalSignature, nonRepudiation, keyEncipherment, keyAgreement crlDistributionPoints = URI:http://localhost/crl.crl
      
      





cfgCA.txtファイルの内容:

 #    [req] distinguished_name = req_distinguished_name prompt = no extensions = v3_req [req_distinguished_name] #  C=MD #  ST=Moldova #  L=Chisinau #   O=abc #   OU=zxc #   (,  ) CN=CACHE #   emailAddress=support@abc.md [v3_req] subjectAltName = email:copy keyUsage = critical, keyCertSign, cRLSign basicConstraints = critical, CA:TRUE, pathlen:0 nsComment = "CA certificate CACHE" nsCertType = sslCA, emailCA crlDistributionPoints = URI:http://localhost/crl.crl
      
      





cfgServer.txtファイルの内容:

 #    [req] distinguished_name = distinguished_name prompt = no [distinguished_name] C=MD ST=Moldova L=Chisinau O=abc OU=zxc CN=localhost
      
      





cfgClient.txtファイルの内容:

 #    [req] distinguished_name = distinguished_name prompt = no [distinguished_name] serialNumber=987654321 CN=superuser emailAddress=my@abc.md
      
      





これでテスト証明書が作成されました。 次に、Caché、Apache、証明書ストアに登録し、必要に応じて、eTokenにインストールします。



Windows証明書ストアに証明書をインストールします



画像

増す



これを行うには、管理コンソール(mmc.exe)から適切なスナップインを使用できます。

  • ca.cerは、ローカルコンピューターの信頼されたルート証明機関にインストールする必要があります。
  • server.pfxは、ローカルコンピューターの個人証明書にインストールする必要があります(IISの構成に必要)。
  • client.pfxは、現在のユーザーの個人証明書にインストールする必要があります。 eTokenの所有者は、この項目をスキップできます。


eTokenに証明書をインストールする



これを行うには、デバイスに付属のソフトウェアを使用します。



CachéでSSL構成を構成する



  1. ポータルで、 %SuperServerという名前のSSL構成を作成および構成します。



    画像

    増す



  2. CachéスーパーサーバによるSSL / TLSサポートを有効にします。



    画像

    増す



  3. すべてが正しくセットアップされ、SSLサポートが機能していることを確認するために、テストクライアント構成を作成して構成します。



    画像

    増す



    次に、SSL接続をテストします。 すべてを正しく行った場合、スクリーンショットのように、安全な接続の確立に関するメッセージが表示されます。

    注:必要に応じて、 %TELNET / SSLという名前のSSL構成を作成して、telnet接続でSSLをサポートできます。


Cachéに組み込まれたApacheのSSL構成



注:このセクションの詳細な説明は、 mod_sslのドキュメントに記載されています。 ここから Windows用SSLを使用した Apacheをダウンロードします。


  1. mod_ssl.soファイルを%acheHome%\ httpd \ modulesフォルダーにインストールします。

  2. %acheHome%\ httpd \ conf \ httpd.confファイルに次の行を追加します
     ... UseCanonicalName Off SSLEngine on SSLCertificateFile C:/SSLKeys/servercrt.pem SSLCertificateKeyFile C:/SSLKeys/serverkey.pem SSLCACertificateFile C:/SSLKeys/cacrt.pem SSLVerifyClient require SSLVerifyDepth 10 SSLCipherSuite TLSv1:SSLv3:!ADH:!LOW:!EXP:@STRENGTH SSLOptions +StdEnvVars ... LoadModule ssl_module modules/mod_ssl.so ...
          
          





  3. コマンドラインからビルトインApacheを再起動します:

     httpd.exe -k restart -n CACHEhttpd -c "Listen 8972"
          
          





  4. システム管理ポータルまたはキューバからドキュメントを起動し、安全な接続を確立するために、サーバー証明書と同じ認証センターによって署名された有効なクライアント証明書が必要です。



CSP / ZENアプリケーションからのクライアント証明書データの読み取り



CSPゲートウェイで、追加のすべてのCGI環境変数のCachéへの転送を有効にする必要があります。



画像

増す



これで、Webアプリケーションで、次のようにWebサーバーのタイプに応じて証明書設定を取得できます。

Class sqlru.testpage Extends %ZEN.Component.page

{



/// This XML block defines the contents of this page.

XData
Contents [ XMLNamespace = "www.intersystems.com/zen" ]

{

<
page xmlns = "www.intersystems.com/zen" title = "" >

<
textarea id = "ta" value = "test" rows = "10" cols = "50" />

</
page >

}



Method %OnAfterCreatePage() As %Status

{

if %request. CgiEnvs ( "SERVER_SOFTWARE" )[ "Apache" {

set a = %request. CgiEnvs ( "SSL_CLIENT_S_DN" )

} else {

set a = %request. CgiEnvs ( "CERT_SUBJECT" )

}



do .. %SetValueById ( "ta" ,a)

Quit $$$OK

}

}






他の証明書属性も同じ方法で読み取ることができます。

  • SSL_CLIENT_I_DN ;
  • SSL_SERVER_I_DN ;
  • SSL_SERVER_S_DN ;
  • ...


SSLを使用して.NETからCachéに接続する



 var db = new CacheConnection("Server = localhost; Port = 1972; Namespace = SAMPLES; Password = SYS; User ID = _SYSTEM; SSL=true;"); if (db.State == ConnectionState.Closed) { db.Open(); textBox1.Text = db.ServerZV; } db.Close();
      
      





個人証明書ストアの最初の有効な証明書が使用されます。 証明書がeToken上にある場合、PINコードが要求されます。

たとえば、ストレージが空の場合、eTokenが挿入されていない、またはすべての証明書が無効な場合、接続はエラーで中断されます。



SSLを使用してJavaからCachéに接続する



まず、適切なストアに証明書を追加する必要があります。truststoreの信頼できる証明書、 keystoreのクライアント証明書。

この場合、パスワード「mysecret」で保護されたファイルclient_pwd.pfxが キーストアとして適しています

ルート証明書は、別のトラストストアまたは標準のcacertsに挿入できます。



 keytool -importcert -alias CACHE -file c:\SSLKeys\ca.cer -keystore truststore -storepass mysecret
      
      



または
 keytool -importcert -alias CACHE -file c:\SSLKeys\ca.cer -keystore cacerts -storepass changeit
      
      





次に、クライアント構成ファイルSSLConfig.Propertiesを作成します。

 protocol=SSLv3 keyStore=C:/SSLKeys/client_pwd.pfx keyStoreType=PKCS12 keyStorePassword=mysecret keyRecoveryPassword=mysecret #  ca     cacerts,     trustStore=C:/SSLKeys/truststore trustStoreType=JKS trustStorePassword=mysecret
      
      





注:詳細については、 JSSEのドキュメントをご覧ください。


次のように、SSLを使用してJavaアプリケーションから接続できるようになりました。

 package test; import java.sql.Connection; import com.intersys.jdbc.CacheDataSource; public class Test { public static void main(String[] args) throws Throwable { String url = "jdbc:Cache://localhost:1972/USER"; String username = "_SYSTEM"; String password = "SYS"; System.setProperty("com.intersys.SSLConfigFile", "C:/SSLKeys/SSLConfig.Properties"); CacheDataSource cs = new CacheDataSource(); cs.setURL(url); cs.setUser(username); cs.setPassword(password); cs.setConnectionSecurityLevel(10); Connection cn = cs.getConnection(); System.out.println("  !"); //Database db = CacheDatabase.getDatabase(cn); } }
      
      





CSPゲートウェイでのSSLの構成



画像

増す



サーバーへの接続を確認しましょう。すべて正しくセットアップされていますか?



画像

増す



ODBCでSSLを構成する



画像



SSL構成設定はレジストリに保存されます: HKEY_CURRENT_USER \ Software \ InterSystems \ Cache \ SSLConfigurations \ SSL configuration name

パラメーターの説明は、 Security.SSLConfigsクラスにあります。

テスト設定はCacheOdbcSSL.regファイルにあります(以下を参照)。



サーバーへの接続を確認しましょう。すべて正しくセットアップされていますか?



画像



ソーススクリプト



All Articles