這是我第一次使用Java密鑰存儲,並且遇到了一些困難。我有ServerA
發送日誌到ServerB
。我能夠建立一個不安全的http
通信來傳輸日誌。但是,將JKS
合併爲使用https
建立安全通信時,ServerB
似乎沒有收到任何東西。兩臺服務器如何使用JKS
進行安全通信?Java密鑰存儲和HTTPS服務器到服務器通信不起作用
下面是我當前如何將所有的這件事:
在ServerA
創建密鑰庫:
在ServerA
產生自簽名的密鑰庫證書
keytool -genkey \
-alias jkstest \
-keyalg RSA \
-validity 365 \
-keystore /apps/logstash/jkstest.jks
-keysize 2048
在ServerA
提取證書
keytool -export \
-rfc -alias jkstest \
-keystore /apps/logstash/jkstest.jks \
-file /apps/logstash/jkstest.crt
-storepass somepass
從ServerA
密鑰存儲複製到ServerB
scp /apps/logstash/jkstest.jks [email protected]:/apps/logstash/jkstest.jks
我使用logstash發送日誌從ServerA
到ServerB
。這是一個非常簡單直接的下載和安裝應用程序。關鍵/項重要的部分是在其中使用JKS配置:
ServerA
config.conf
input {
file {
path => "/var/log/apache2/error.log"
start_position => beginning
}
}
output {
stdout { codec => rubydebug { metadata => true } }
http {
http_method => "post"
codec => "json_lines"
url => "https://serverb.com:5000/"
ssl_certificate_validation => true
cacert => "/apps/logstash/jkstest.crt"
}
}
ServerB
config.conf
input {
http {
port => 5000
codec => json
ssl => true
keystore => "/apps/logstash/jkstest.jks"
keystore_password => "hardt0gu355"
}
}
output {
stdout { codec => rubydebug { metadata => true } }
}
要開始發送和接收日誌:
ServerA
start logstash
bin/logstash agent -f config.conf -l logstash.log
ServerB
開始logstash
bin/logstash agent -f config.conf -l logstash.log
嘗試使用'ssl_certificate_validation => false',因爲它是自簽名證書,因此可能無法完全驗證。 – Redlab
自從我完成其中一項之後已經很長時間了,但由於您使用的是自簽名證書,因此您無法將其導入爲「可信任的證書鏈」,並將其鏈接到預先打包的其中一個可信的證書頒發機那麼,對於另一臺服務器來說,它可能必須作爲兩端的可信證書手動導入? – djangofan
@djangofan我不知道我是否做了類似的事情,但仍然沒有在其他服務器上收到任何東西。你可以測試你的目的,看看你做的方式仍然有效嗎? – MaryCoding