W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
Solr可以使用SSL對(duì)客戶端和 SolrCloud 模式下的節(jié)點(diǎn)之間的通信進(jìn)行加密。
本節(jié)介紹如何使用自簽名證書啟用SSL。
有關(guān)SSL證書和密鑰的背景信息,請(qǐng)參閱http://www.tldp.org/HOWTO/SSL-Certificates-HOWTO/。
要生成自簽名證書和將用于對(duì)服務(wù)器和客戶端進(jìn)行身份驗(yàn)證的單個(gè)密鑰,我們將使用JDK keytool命令并創(chuàng)建一個(gè)單獨(dú)的密鑰庫。這個(gè)密鑰庫也將被用作下面的信任庫。為了實(shí)現(xiàn)這些目的,可以使用JDK附帶的密鑰庫,并使用單獨(dú)的信任庫,但這些選項(xiàng)不在此處介紹。
在二進(jìn)制Solr發(fā)行版的server/etc/目錄中運(yùn)行以下命令。假設(shè)您的PATH中有JDK keytool實(shí)用程序,那openssl也在您的PATH中。有關(guān)Windows和Solaris的OpenSSL二進(jìn)制文件,請(qǐng)參閱https://www.openssl.org/related/binaries.html。
該-ext SAN=…? keytool選項(xiàng)允許您指定在主機(jī)名驗(yàn)證期間允許的使用所有DNS名稱或IP地址(但請(qǐng)參閱下面的內(nèi)容,了解如何跳過Solr節(jié)點(diǎn)之間的主機(jī)名驗(yàn)證,以便您不必在此指定所有主機(jī))。
除了localhost和127.0.0.1,這個(gè)示例包括LAN IP地址192.168.1.3,用于 Solr 節(jié)點(diǎn)將在其上運(yùn)行的計(jì)算機(jī):
keytool -genkeypair -alias solr-ssl -keyalg RSA -keysize 2048 -keypass secret -storepass secret -validity 9999 -keystore solr-ssl.keystore.jks -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"
上面的命令將在當(dāng)前目錄中創(chuàng)建一個(gè)命名為solr-ssl.keystore.jks的密鑰庫文件。
curl不能使用JKS格式的密鑰庫,所以JKS密鑰庫需要轉(zhuǎn)換為curl可以理解的PEM格式。
首先使用以下keytool命令將JKS密鑰庫轉(zhuǎn)換為PKCS12格式:
keytool -importkeystore -srckeystore solr-ssl.keystore.jks -destkeystore solr-ssl.keystore.p12 -srcstoretype jks -deststoretype pkcs12
keytool應(yīng)用程序?qū)⑻崾灸鷦?chuàng)建目標(biāo)密鑰庫密碼和創(chuàng)建密鑰庫時(shí)設(shè)置的源密鑰庫密碼(上面示例中的“secret”)。
接下來,使用以下openssl命令將PKCS12格式的密鑰庫(包括證書和密鑰)轉(zhuǎn)換為PEM格式:
openssl pkcs12 -in solr-ssl.keystore.p12 -out solr-ssl.pem
如果要在OS X Yosemite(10.10)上使用curl,則需要?jiǎng)?chuàng)建PEM格式的證書版本,如下所示:
openssl pkcs12 -nokeys -in solr-ssl.keystore.p12 -out solr-ssl.cacert.pem
Solr控制腳本已經(jīng)設(shè)置為將與SSL相關(guān)的Java系統(tǒng)屬性傳遞給JVM。要激活SSL設(shè)置,請(qǐng)取消注釋并更新bin/solr.in.sh 中的以 SOLR_SSL_ *開始的一組屬性。(或 Windows 上的bin\solr.in.cmd)。
如果使用將Solr轉(zhuǎn)換為Production的步驟將Solr設(shè)置為L(zhǎng)inux上的服務(wù),請(qǐng)?jiān)?code>/var/solr/solr.in.sh中改為使用這些更改。
bin / solr.in.sh示例SOLR_SSL_ *配置:
SOLR_SSL_KEY_STORE=etc/solr-ssl.keystore.jks
SOLR_SSL_KEY_STORE_PASSWORD=secret
SOLR_SSL_TRUST_STORE=etc/solr-ssl.keystore.jks
SOLR_SSL_TRUST_STORE_PASSWORD=secret
# Require clients to authenticate
SOLR_SSL_NEED_CLIENT_AUTH=false
# Enable clients to authenticate (but not require)
SOLR_SSL_WANT_CLIENT_AUTH=false
# Define Key Store type if necessary
SOLR_SSL_KEY_STORE_TYPE=JKS
SOLR_SSL_TRUST_STORE_TYPE=JKS
當(dāng)您啟動(dòng)Solr時(shí),bin/solr腳本將包含這些設(shè)置,bin/solr.in.sh并將這些SSL相關(guān)的系統(tǒng)屬性傳遞給JVM。
客戶端驗(yàn)證設(shè)置 啟用S??OLR_SSL_NEED_CLIENT_AUTH或SOLR_SSL_WANT_CLIENT_AUTH,但不能同時(shí)使用兩者。他們是相互排斥的,碼頭將選擇其中一個(gè)可能不是你所期望的。 |
同樣,當(dāng)您在Windows上啟動(dòng)Solr時(shí),bin\solr.in.cmd中的bin\solr.cmd腳本將包含以下設(shè)置:取消注釋并更新SOLR_SSL_*以將這些SSL相關(guān)的系統(tǒng)屬性傳遞給JVM 開始的屬性集:
bin \ solr.in.cmd示例SOLR_SSL_ *配置:
set SOLR_SSL_KEY_STORE=etc/solr-ssl.keystore.jks
set SOLR_SSL_KEY_STORE_PASSWORD=secret
set SOLR_SSL_TRUST_STORE=etc/solr-ssl.keystore.jks
set SOLR_SSL_TRUST_STORE_PASSWORD=secret
REM Require clients to authenticate
set SOLR_SSL_NEED_CLIENT_AUTH=false
REM Enable clients to authenticate (but not require)
set SOLR_SSL_WANT_CLIENT_AUTH=false
使用下面的命令啟動(dòng)Solr; 默認(rèn)情況下,客戶端不需要認(rèn)證:
bin/solr -p 8984
bin\solr.cmd -p 8984
本節(jié)介紹如何運(yùn)行沒有初始集合的雙節(jié)點(diǎn)SolrCloud集群以及單節(jié)點(diǎn)外部ZooKeeper。以下命令假定您已經(jīng)創(chuàng)建了上述密鑰庫。
管理員不支持像 Solr 這樣的客戶進(jìn)行加密通信。有幾個(gè)相關(guān)的 JIRA 門票, SSL 支持正在計(jì)劃/工作: ZOOKEEPER-235;ZOOKEEPER-236;ZOOKEEPER-1000;和 ZOOKEEPER-2120。
ZooKeeper不支持像Solr這樣的客戶端的加密通信。有幾個(gè)相關(guān)的JIRA標(biāo)簽正在計(jì)劃/處理SSL支持:ZOOKEEPER-235 ; ZOOKEEPER-236 ; ZOOKEEPER-1000 ; 和ZOOKEEPER-2120。
本節(jié)假設(shè)您已經(jīng)在本地主機(jī)上的端口2181上創(chuàng)建并啟動(dòng)了單節(jié)點(diǎn)外部ZooKeeper - 請(qǐng)參閱設(shè)置外部ZooKeeper集成。
在任何Solr節(jié)點(diǎn)啟動(dòng)之前,都需要將urlScheme集群屬性設(shè)置為https。下面的示例使用二進(jìn)制Solr發(fā)行版附帶的zkcli工具來執(zhí)行此操作:
server/scripts/cloud-scripts/zkcli.sh -zkhost localhost:2181 -cmd clusterprop -name urlScheme -val https
server\scripts\cloud-scripts\zkcli.bat -zkhost localhost:2181 -cmd clusterprop -name urlScheme -val https
如果您已經(jīng)設(shè)置了您的ZooKeeper的集群使用了Solr的chroot環(huán)境,確保您使用zkcli的正確的zkhost字符串,如:-zkhost localhost:2181/solr。
為兩個(gè)SolrCloud節(jié)點(diǎn)中的每一個(gè)節(jié)點(diǎn)創(chuàng)建兩個(gè)server/solr/副本,作為Solr主目錄:
mkdir cloud
cp -r server/solr cloud/node1
cp -r server/solr cloud/node2
mkdir cloud
xcopy /E server\solr cloud\node1\
xcopy /E server\solr cloud\node2\
接下來,在端口8984上啟動(dòng)第一個(gè)Solr節(jié)點(diǎn)。如果在通過本頁上一節(jié)的工作時(shí)啟動(dòng)它,請(qǐng)務(wù)必先停止獨(dú)立服務(wù)器。
bin/solr -cloud -s cloud/node1 -z localhost:2181 -p 8984
bin\solr.cmd -cloud -s cloud\node1 -z localhost:2181 -p 8984
請(qǐng)注意, 使用-s 選項(xiàng)可以設(shè)置 node1 的 Solr 主目錄的位置。
如果您創(chuàng)建的 SSL 密鑰沒有所有 solr 節(jié)點(diǎn)將運(yùn)行的 DNS 名稱/IP 地址, 則可以告訴 solr 通過將 solr.ssl.checkPeerName 系統(tǒng)屬性設(shè)置為 false 來跳過 solr 節(jié)點(diǎn)間通信的主機(jī)名驗(yàn)證:
請(qǐng)注意,使用該-s選項(xiàng)可以設(shè)置 node1 的 Solr 主目錄的位置。
如果您創(chuàng)建了沒有運(yùn)行Solr節(jié)點(diǎn)的所有DNS names/IP 地址的 SSL 密鑰,則可以告訴 solr 通過將solr.ssl.checkPeerName系統(tǒng)屬性設(shè)置為false來跳過Solr-node通信跳過主機(jī)名驗(yàn)證。
* nix 命令:
bin/solr -cloud -s cloud/node1 -z localhost:2181 -p 8984 -Dsolr.ssl.checkPeerName=false
Windows 命令:
bin\solr.cmd -cloud -s cloud\node1 -z localhost:2181 -p 8984 -Dsolr.ssl.checkPeerName=false
最后,在端口7574上啟動(dòng)第二個(gè)Solr節(jié)點(diǎn) - 再次跳過主機(jī)名驗(yàn)證,添加-Dsolr.ssl.checkPeerName=false;
bin/solr -cloud -s cloud/node2 -z localhost:2181 -p 7574
bin\solr.cmd -cloud -s cloud\node2 -z localhost:2181 -p 7574
在 OS X 小牛 (10.9) 上卷曲已降級(jí)的 SSL 支持。有關(guān)允許 one-way SSL 的更多信息和變通方法, 請(qǐng)參見 http://curl.haxx.se/mail/archive-2013-10/0036.html。在 OS X 優(yōu)勝美地 (10.10) 被改進(jìn)-2 方式 SSL 是可能的-看見 http://curl.haxx.se/mail/archive-2014-10/0053.html。
以下各節(jié)中的卷曲命令在 OS X 優(yōu)勝美地 (10.10) 上的系統(tǒng)卷曲不會(huì)工作。相反, 使用-e 參數(shù)提供的證書必須是 PKCS12 格式的, 并且提供了-cacert 參數(shù)的文件必須只包含 CA 證書, 并且沒有密鑰 (請(qǐng)參見上面有關(guān)創(chuàng)建此文件的說明):
在OS X Mavericks(10.9)上 curl 已經(jīng)降級(jí)了SSL支持。有關(guān)允許單向SSL的更多信息和解決方法,請(qǐng)參閱http://curl.haxx.se/mail/archive-2013-10/0036.html。在OS X Yosemite(10.10)上 curl 得到改進(jìn) - 可以使用雙向SSL - 請(qǐng)參閱http://curl.haxx.se/mail/archive-2014-10/0053.html。
以下各節(jié)中的 curl 命令在OS X Yosemite(10.10)中的系統(tǒng)無法使用以下部分中的curl命令。相反。使用 -E 參數(shù)提供的證書必須是 PKCS12 格式的。并且提供了-cacert 參數(shù)的文件必須只包含 CA 證書,并且不包含任何密鑰(有關(guān)創(chuàng)建此文件的說明,請(qǐng)參閱上文):
curl -E solr-ssl.keystore.p12:secret --cacert solr-ssl.cacert.pem ...
如果您的操作系統(tǒng)不包含 curl,您可以在這里下載二進(jìn)制文件:http ://curl.haxx.se/download.html
使用默認(rèn)的configset(_default)創(chuàng)建名為mycollection的 2-shard,replicationFactor = 1集合:
bin/solr create -c mycollection -shards 2
bin\solr.cmd create -c mycollection -shards 2
該create操作將把您的包含文件中設(shè)置的 SOLR_SSL_ * 屬性傳遞給用于創(chuàng)建集合的 SolrJ 代碼。
要獲得最終的群集狀態(tài)(再次,如果您尚未啟用客戶端身份驗(yàn)證,請(qǐng)刪除該-E solr-ssl.pem:secret選項(xiàng)):
curl -E solr-ssl.pem:secret --cacert solr-ssl.pem "https://localhost:8984/solr/admin/collections?action=CLUSTERSTATUS&indent=on"
您應(yīng)該得到這樣的回應(yīng):
{
"responseHeader":{
"status":0,
"QTime":2041},
"cluster":{
"collections":{
"mycollection":{
"shards":{
"shard1":{
"range":"80000000-ffffffff",
"state":"active",
"replicas":{"core_node1":{
"state":"active",
"base_url":"https://127.0.0.1:8984/solr",
"core":"mycollection_shard1_replica1",
"node_name":"127.0.0.1:8984_solr",
"leader":"true"}}},
"shard2":{
"range":"0-7fffffff",
"state":"active",
"replicas":{"core_node2":{
"state":"active",
"base_url":"https://127.0.0.1:7574/solr",
"core":"mycollection_shard2_replica1",
"node_name":"127.0.0.1:7574_solr",
"leader":"true"}}}},
"maxShardsPerNode":"1",
"router":{"name":"compositeId"},
"replicationFactor":"1"}},
"properties":{"urlScheme":"https"}}}
使用post.jar索引一些示例文檔到上面創(chuàng)建的SolrCloud集合:
cd example/exampledocs
java -Djavax.net.ssl.keyStorePassword=secret -Djavax.net.ssl.keyStore=../../server/etc/solr-ssl.keystore.jks -Djavax.net.ssl.trustStore=../../server/etc/solr-ssl.keystore.jks -Djavax.net.ssl.trustStorePassword=secret -Durl=https://localhost:8984/solr/mycollection/update -jar post.jar *.xml
使用curl來查詢上面創(chuàng)建的SolrCloud集合,從包含上面創(chuàng)建的PEM格式化證書和密鑰的目錄(例如:example/etc/) - 如果您還沒有啟用客戶端身份驗(yàn)證(系統(tǒng)屬性-Djetty.ssl.clientAuth=true),那么您可以刪除-E solr-ssl.pem:secret選項(xiàng):
curl -E solr-ssl.pem:secret --cacert solr-ssl.pem "https://localhost:8984/solr/mycollection/select?q=*:*"
從一個(gè)使用SolrJ的java客戶端索引一個(gè)文檔。在下面的代碼中,javax.net.ssl.*系統(tǒng)屬性是以編程方式設(shè)置的,但是您可以在java命令行中指定它們,如上post.jar例所示:
System.setProperty("javax.net.ssl.keyStore", "/path/to/solr-ssl.keystore.jks");
System.setProperty("javax.net.ssl.keyStorePassword", "secret");
System.setProperty("javax.net.ssl.trustStore", "/path/to/solr-ssl.keystore.jks");
System.setProperty("javax.net.ssl.trustStorePassword", "secret");
String zkHost = "127.0.0.1:2181";
CloudSolrClient client = new CloudSolrClient.Builder().withZkHost(zkHost).build();
client.setDefaultCollection("mycollection");
SolrInputDocument doc = new SolrInputDocument();
doc.addField("id", "1234");
doc.addField("name", "A lovely summer holiday");
client.add(doc);
client.commit();
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: