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ファイルにあります(以下を参照)。

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

画像

ソーススクリプト

Source: https://habr.com/ru/post/J144310/


All Articles