用于服务器到服务器通信的Java密钥存储和HTTPS不工作
这是我第一次使用Java密钥存储,我遇到了一些困难。我已将用于服务器到服务器通信的Java密钥存储和HTTPS不工作,https,logstash,logstash-configuration,jks,Https,Logstash,Logstash Configuration,Jks,这是我第一次使用Java密钥存储,我遇到了一些困难。我已将ServerA日志发送到ServerB。我能够建立一个不安全的http通信来传输日志。但是,当合并JKS以使用https建立安全通信时,ServerB似乎没有收到任何信息。两台服务器如何使用JKS安全通信 以下是我目前如何设置所有这些: 在服务器a中创建密钥库: 在ServerA中在密钥库中生成自签名证书 keytool -genkey \ -alias jkstest \ -keyalg RSA \
ServerA
日志发送到ServerB
。我能够建立一个不安全的http
通信来传输日志。但是,当合并JKS
以使用https
建立安全通信时,ServerB
似乎没有收到任何信息。两台服务器如何使用JKS安全通信
以下是我目前如何设置所有这些:
在服务器a
中创建密钥库:
在ServerA中
在密钥库中生成自签名证书
keytool -genkey \
-alias jkstest \
-keyalg RSA \
-validity 365 \
-keystore /apps/logstash/jkstest.jks
-keysize 2048
在服务器A中
提取证书
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
我正在使用将日志从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"
}
}
input {
http {
port => 5000
codec => json
ssl => true
keystore => "/apps/logstash/jkstest.jks"
keystore_password => "hardt0gu355"
}
}
output {
stdout { codec => rubydebug { metadata => true } }
}
ServerB
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"
}
}
input {
http {
port => 5000
codec => json
ssl => true
keystore => "/apps/logstash/jkstest.jks"
keystore_password => "hardt0gu355"
}
}
output {
stdout { codec => rubydebug { metadata => true } }
}
要开始发送和接收日志,请执行以下操作:
ServerA
启动日志存储
bin/logstash agent -f config.conf -l logstash.log
bin/logstash agent -f config.conf -l logstash.log
ServerB
启动日志存储
bin/logstash agent -f config.conf -l logstash.log
bin/logstash agent -f config.conf -l logstash.log
不是100%确定,但在服务器A上,您应该将生成的证书作为受信任的证书
不是cacert(除非您也有证书颁发机构证书,但您的证书似乎是自行签署的)您有两种方法: 然后您就有了ssl\u certificate\u validation=true,您应该在双方都提供信任库——ServerA和ServerB。 在您的设置中,仅在服务器A上提供cacert,在服务器B上提供密钥库。 但您应该在两台服务器上都定义密钥库和信任库 所以你可以做下面的事情 1) 在两台服务器上使用相同的密钥库,在两台服务器上也使用相同的信任库。这是一种非常不安全的方法 2) 您必须生成独立的服务器和客户机密钥库,然后交换它们的公钥(证书)。在本例中,您可以使用cacert而不是truststore 或者,您可以生成独立CA并生成签名证书()。
这是一种更好的方法,但在您的情况下可能会有一点开销。尝试使用
ssl\u certificate\u validation=>false
,因为它是一个自签名证书,所以可能无法完全验证。我已经很久没有这样做了,但是因为您使用的是自签名证书,您将无法将其作为“可信证书链”导入,并将其链接到一个预打包的可信证书颁发机构。因此,对于要信任的另一台服务器,可能必须手动将其作为两端的受信任证书导入?@djangofan我不确定我是否做了类似的操作,但在另一台服务器中仍然没有收到任何内容。你能测试一下你的方法是否仍然有效吗?也许这提供了另一个提示。我真的不能再补充了:好的观点。我在serverA
上创建了一个truststore
。使用我从自己的keystore
在SeverB
中创建的证书。然而,没有运气。在serverA
上运行此命令以创建信任库keytool-importcert-file serverB.cer-alias mycert-keystore truststore.jks
。您是否能够复制或让它通过ssl进行通信?我让它与beats(例如FileBeat)一起工作,以使用以下FileBeat进行日志存储是首选解决方案。然而,我正试图让它从一个logstash实例运行到另一个logstash实例。有两个标志keystore
和truststore
。我两个都考了,什么也没考。