Solr で SSL を有効にする
Solr の管理画面や API へのリクエストで HTTPS を使えるようにします。
自己署名証明書作成
プライベートなネットワーク内での利用を想定して自己署名証明書を作成します。
$ cd server/etc $ keytool -genkeypair -alias solr-ssl -keyalg RSA -keysize 2048 -keypass secret -storepass secret -validity 9999 -keystore solr-ssl.keystore.p12 -storetype PKCS12 -ext SAN=DNS:localhost,IP:192.168.1.3,IP:127.0.0.1 -dname "CN=localhost, OU=Organizational Unit, O=Organization, L=Location, ST=State, C=Country" $ openssl pkcs12 -in solr-ssl.keystore.p12 -out solr-ssl.pem
keytool は JDK に含まれるツールです。
IPの部分はSolrサーバのIPアドレスを指定します。
作成した証明書を参照するように solr.in.sh を設定します。
SOLR_SSL_ENABLED=true SOLR_SSL_KEY_STORE=etc/solr-ssl.keystore.p12 SOLR_SSL_KEY_STORE_PASSWORD=secret SOLR_SSL_TRUST_STORE=etc/solr-ssl.keystore.p12 SOLR_SSL_TRUST_STORE_PASSWORD=secret SOLR_SSL_NEED_CLIENT_AUTH=false SOLR_SSL_WANT_CLIENT_AUTH=false SOLR_SSL_CHECK_PEER_NAME=true
HTTPS を使うように ZooKeeper を設定
SolrCloud での運用の場合は ZooKeeper で保持する設定を変更して Solr が HTTPS 通信を使うようにします。
$ server/scripts/cloud-scripts/zkcli.sh -zkhost localhost:2181 -cmd clusterprop -name urlScheme -val https
ZooKeeper 設定前に作成したコレクションの場合は以下を実行します。
$ curl 'http://localhost:8983/solr/admin/collections?action=CLUSTERPROP&name=urlScheme&val=https'
Solr起動
$ bin/solr -cloud -s example/cloud/node1 -z localhost:2181 -p 8984
動作確認
コレクションを作成して Collections API で状態を確認します。
bin/solr 等のツールは solr.in.sh の環境変数を使って HTTPS 通信してくれます。
curl での API コールの場合は pem ファイルを指定します。
$ bin/solr create -c mycollection -shards 2 $ curl -E solr-ssl.pem:secret --cacert solr-ssl.pem "https://localhost:8984/solr/admin/collections?action=CLUSTERSTATUS&indent=on" { "responseHeader":{ "status":0, "QTime":1}, "cluster":{ "collections":{ "mycollection":{ "pullReplicas":"0", "configName":"mycollection", "replicationFactor":"1", "shards":{ "shard1":{ "range":"80000000-ffffffff", "state":"active", "replicas":{"core_node4":{ "core":"mycollection_shard1_replica_n2", "leader":"true", "core_node_name":"core_node4", "node_name":"localhost:8984_solr", "base_url":"https://localhost:8984/solr", "state":"active", "collection":"mycollection", "shard":"shard1", "type":"NRT", "force_set_state":"false"}}, "health":"GREEN"}, "shard2":{ "range":"0-7fffffff", "state":"active", "replicas":{"core_node3":{ "core":"mycollection_shard2_replica_n1", "leader":"true", "core_node_name":"core_node3", "node_name":"localhost:8984_solr", "base_url":"https://localhost:8984/solr", "state":"active", "collection":"mycollection", "shard":"shard2", "type":"NRT", "force_set_state":"false"}}, "health":"GREEN"}}, "router":{"name":"compositeId"}, "nrtReplicas":"1", "tlogReplicas":"0", "health":"GREEN", "znodeVersion":4}}, "properties":{"urlScheme":"https"}, "live_nodes":["localhost:8984_solr"]}}
CLUSTERSTATUS の応答に含まれる内部的な URL も https になっていることが分かります。