这是我第一次使用Java Key Store,我遇到了一些困难。我ServerA
将日志发送到ServerB
。我能够建立一个不安全的http
通信来传输日志。但是,在使用JKS
合并https
以建立安全通信时,ServerB
似乎没有收到任何内容。两个服务器如何使用JKS
安全地进行通信?
以下是我目前正在设置所有这些内容的方法:
在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 username@serverb.com:/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
启动logstash
bin/logstash agent -f config.conf -l logstash.log
ServerB
启动logstash
bin/logstash agent -f config.conf -l logstash.log
答案 0 :(得分:1)
不是100%肯定,但是,在服务器A上,您应该configure a truststore将生成的证书作为可信证书。
不是cacert(除非您还拥有证书颁发机构证书,但您的证书似乎是自签名的)
答案 1 :(得分:0)
你有两种方法:
然后你有ssl_certificate_validation = true你应该提供双方的信任库 - ServerA和ServerB。 在您的设置中,您只在ServerA上提供cacert,在ServerB上提供密钥库。 但是你应该在两台服务器上定义密钥库和信任。
所以你可以做以下事情
1)在两台服务器上使用相同的密钥库,并在两台服务器上使用相同的信任库。这种非常不安全的方法。
2)您必须生成独立的服务器和客户端密钥库,然后交换他们的公钥(证书),请参阅示例http://ruchirawageesha.blogspot.com/2010/07/how-to-create-clientserver-keystores.html,在这种情况下,您可以使用 cacert 而不是truststore。
或者您可以生成独立的CA并生成签名证书(https://jamielinux.com/docs/openssl-certificate-authority/introduction.html)。 这是更好的方法,但也许在你的情况下会有一点开销。