Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于服务器到服务器通信的Java密钥存储和HTTPS不工作_Https_Logstash_Logstash Configuration_Jks - Fatal编程技术网

用于服务器到服务器通信的Java密钥存储和HTTPS不工作

用于服务器到服务器通信的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 \

这是我第一次使用Java密钥存储,我遇到了一些困难。我已将
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
。我两个都考了,什么也没考。