我正试图建立一个日志转发器,但我对建立一个适当的安全通道有问题。试图用在virtualbox中运行的两台ubuntu (服务器14.04)机器来配置它。它们是100%干净的(除了所需的java、ngix、弹性搜索等外,没有安装任何其他用于logstash的包)
。
我生成了钥匙:
sudo openssl req -x509 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt我在logstash服务器上的输入conf:
input {
lumberjack {
port => 5000
type => "logs"
ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
}
}键被复制到转发主机,该主机具有以下配置。
{
"network": {
"servers": [ "192.168.2.107:5000" ],
"timeout": 15,
"ssl ca": "/etc/pki/tls/certs/logstash-forwarder.crt"
"ssl key": "/etc/pki/tls/certs/logstash-forwarder.key"
},
"files": [
{
"paths": [
"/var/log/syslog",
"/var/log/auth.log"
],
"fields": { "type": "syslog" }
}
]
}在logstash服务器运行后,我在转发器机器上“sudo service logstash-forwarder start”,给出以下重复错误:
Jul 9 05:06:21 ubuntu logstash-forwarder[1374]: 2014/07/09 05:06:21.589762 Connecting to [192.168.2.107]:5000 (192.168.2.107)
Jul 9 05:06:21 ubuntu logstash-forwarder[1374]: 2014/07/09 05:06:21.595105 Failed to tls handshake with 192.168.2.107 x509: cannot validate certificate for 192.168.2.107 because it doesn't contain any IP SANs
Jul 9 05:06:22 ubuntu logstash-forwarder[1374]: 2014/07/09 05:06:22.595971 Connecting to [192.168.2.107]:5000 (192.168.2.107)
Jul 9 05:06:22 ubuntu logstash-forwarder[1374]: 2014/07/09 05:06:22.602024 Failed to tls handshake with 192.168.2.107 x509: cannot validate certificate for 192.168.2.107 because it doesn't contain any IP SANs正如我前面提到的,我不认为这是一个日志存储问题,而是证书/机器配置问题。问题是,我似乎解决不了这个问题。希望这里一些聪明的人能帮我解决问题?
谢谢
发布于 2014-07-09 04:33:44
..。与192.168.2.107 x509的tls握手失败:无法验证192.168.2.107的证书,因为它不包含任何IP SAN
SSL需要对对等方进行标识,否则您的连接可能是针对中间人的,后者解密+嗅探/修改数据,然后再将加密后的数据转发给真正的目标。标识是使用x509证书完成的,这些证书需要根据受信任的CA进行验证,并且需要标识要连接到的目标。
通常,目标被指定为主机名,这将根据证书的主题和主题替代名称进行检查。在这种情况下,您的目标是一个IP。成功验证证书--必须在subject alternative names部分中给IP颁发证书,但不是作为DNS条目(例如主机名),而是作为IP。
所以你需要的是:
/etc/ssl/openssl.cnf -在[v3_ca]部分添加subjectAltName = IP:192.168.2.107。PS考虑在证书创建命令行中添加-days 365或更多,因为默认的证书有效性仅为30天,您可能不希望每个月重新创建它。
发布于 2014-08-23 12:43:23
在logstash票证上提到了为伐木工人创建适当证书的脚本:由于IP无丢失,SSL握手失败。
下载文件:
curl -O https://raw.githubusercontent.com/driskell/log-courier/1.x/src/lc-tlscert/lc-tlscert.go
...build it:
go build lc-tlscert.go..and运行:
./lc-tlscert
Specify the Common Name for the certificate. The common name
can be anything, but is usually set to the server's primary
DNS name. Even if you plan to connect via IP address you
should specify the DNS name here.
Common name: you_domain_or_whatever
The next step is to add any additional DNS names and IP
addresses that clients may use to connect to the server. If
you plan to connect to the server via IP address and not DNS
then you must specify those IP addresses here.
When you are finished, just press enter.
DNS or IP address 1: 172.17.42.1 (th ip address to trust)
DNS or IP address 2:
How long should the certificate be valid for? A year (365
days) is usual but requires the certificate to be regenerated
within a year or the certificate will cease working.
Number of days: 3650
Common name: what_ever
DNS SANs:
None
IP SANs:
172.17.42.1
The certificate can now be generated
Press any key to begin generating the self-signed certificate.
Successfully generated certificate
Certificate: selfsigned.crt
Private Key: selfsigned.key
Copy and paste the following into your Log Courier
configuration, adjusting paths as necessary:
"transport": "tls",
"ssl ca": "path/to/selfsigned.crt",
Copy and paste the following into your LogStash configuration,
adjusting paths as necessary:
ssl_certificate => "path/to/selfsigned.crt",
ssl_key => "path/to/selfsigned.key",发布于 2015-02-11 19:05:31
我对这件事很不满意。我没有使用logstash,我只是想让IP SANs与码头tls一起工作。我将像https (https://docs.docker.com/articles/https/)上的docker文章所描述的那样创建证书,然后当我从码头客户端连接时:
docker --tlsverify -H tcp://127.0.0.1:2376 version我会得到这个错误:
...
FATA[0000] An error occurred trying to connect: Get https://127.0.0.1:2376/v1.16/version: \
x509: cannot validate certificate for 127.0.0.1 because it doesn't contain any IP SANs 把我逼疯了。我承认,我在openssl中无所不在,所以,每个人都可能已经知道我发现了什么。这里的subjectAltName示例(以及其他地方)显示了更新openssl.cnf文件的情况。我不能让它起作用。我在openssl.cnf上做了一个定位,将其复制到一个本地目录,然后对其进行更改。当我检查证书时,它没有包含扩展名:
openssl x509 -noout -text -in server-cert.pem用于创建证书的命令如下(来自docker文章):
openssl x509 -req -days 365 -in server.csr -CA ca.pem -CAkey ca-key.pem \
-CAcreateserial -out server-cert.pem不能向此命令添加-config openssl.cnf行,它无效。您也不能将openssl.cnf文件复制到当前目录,修改它,并希望它能够以这种方式工作。几行之后,我注意到'client‘cert使用了一个-extfile extfile.cnf。所以,我试过这个
echo subjectAltName = IP:127.0.0.1 > extfile.cnf
openssl x509 -req -days 365 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial \
-out server-cert.pem -extfile extfile.cnf这就解决了问题。因此,无论出于什么原因,我的openssl版本不允许我修改openssl.cnf文件,但是,我可以这样指定subjectAltName。效果很好!
您可以指定任意数量的IP地址,如IP:127.0.0.1,IP:127.0.1.1 (非本地主机)。
https://serverfault.com/questions/611120
复制相似问题