99re热这里只有精品视频,7777色鬼xxxx欧美色妇,国产成人精品一区二三区在线观看,内射爽无广熟女亚洲,精品人妻av一区二区三区

Solr使用自簽名證書啟啟用S??SL

2018-12-20 15:22 更新

Solr可以使用SSL對(duì)客戶端和 SolrCloud 模式下的節(jié)點(diǎn)之間的通信進(jìn)行加密。

本節(jié)介紹如何使用自簽名證書啟用SSL。

有關(guān)SSL證書和密鑰的背景信息,請(qǐng)參閱http://www.tldp.org/HOWTO/SSL-Certificates-HOWTO/。

基本的SSL設(shè)置

生成自簽名證書和密鑰

要生成自簽名證書和將用于對(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的密鑰庫文件。

將證書和密鑰轉(zhuǎn)換為PEM格式以便與curl一起使用

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

設(shè)置常見的SSL相關(guān)系統(tǒng)屬性

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

使用SSL運(yùn)行單節(jié)點(diǎn)Solr

使用下面的命令啟動(dòng)Solr; 默認(rèn)情況下,客戶端不需要認(rèn)證:

  • * nix 命令:
  • bin/solr -p 8984
  • Windows命令:
  • bin\solr.cmd -p 8984

SSL與SolrCloud

本節(jié)介紹如何運(yùn)行沒有初始集合的雙節(jié)點(diǎn)SolrCloud集群以及單節(jié)點(diǎn)外部ZooKeeper。以下命令假定您已經(jīng)創(chuàng)建了上述密鑰庫。

配置ZooKeeper


管理員不支持像 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。

在啟動(dòng)任何SolrCloud節(jié)點(diǎn)之前,您必須在ZooKeeper中配置solr集群屬性,以便Solr節(jié)點(diǎn)知道通過SSL進(jìn)行通信。

本節(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í)行此操作:

  • * nix 命令:
  • server/scripts/cloud-scripts/zkcli.sh -zkhost localhost:2181 -cmd clusterprop -name urlScheme -val https
  • Windows 命令:
  • 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。

使用SSL運(yùn)行SolrCloud

創(chuàng)建兩個(gè)節(jié)點(diǎn)的Solr主目錄

為兩個(gè)SolrCloud節(jié)點(diǎn)中的每一個(gè)節(jié)點(diǎn)創(chuàng)建兩個(gè)server/solr/副本,作為Solr主目錄:

  • * nix 命令:
  • mkdir cloud
    cp -r server/solr cloud/node1
    cp -r server/solr cloud/node2
  • Windows 命令:
  • mkdir cloud
    xcopy /E server\solr cloud\node1\
    xcopy /E server\solr cloud\node2\

啟動(dòng)第一個(gè)Solr節(jié)點(diǎn)

接下來,在端口8984上啟動(dòng)第一個(gè)Solr節(jié)點(diǎn)。如果在通過本頁上一節(jié)的工作時(shí)啟動(dòng)它,請(qǐng)務(wù)必先停止獨(dú)立服務(wù)器。

  • * nix 命令:
  • bin/solr -cloud -s cloud/node1 -z localhost:2181 -p 8984
  • Windows 命令:
  • 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

啟動(dòng)第二個(gè)Solr節(jié)點(diǎn)

最后,在端口7574上啟動(dòng)第二個(gè)Solr節(jié)點(diǎn) - 再次跳過主機(jī)名驗(yàn)證,添加-Dsolr.ssl.checkPeerName=false;

  • * nix 命令:
  • bin/solr -cloud -s cloud/node2 -z localhost:2181 -p 7574
  • Windows 命令:
  • 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

使用bin / solr創(chuàng)建一個(gè)SolrCloud集合

使用默認(rèn)的configset(_default)創(chuàng)建名為mycollection的 2-shard,replicationFactor = 1集合:

  • * nix 命令:

  • bin/solr create -c mycollection -shards 2

  • Windows 命令:

  • bin\solr.cmd create -c mycollection -shards 2

該create操作將把您的包含文件中設(shè)置的 SOLR_SSL_ * 屬性傳遞給用于創(chuàng)建集合的 SolrJ 代碼。

使用curl檢索SolrCloud群集狀態(tài)

要獲得最終的群集狀態(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

使用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查詢

使用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=*:*"

使用CloudSolrClient索引文檔

從一個(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();
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)