O certificado que você está usando não tem nenhuma SAN IP válida, como mencionado na mensagem:
Failed to tls handshake with x.x.x.x x509: cannot validate certificate for x.x.x.x because
it doesn't contain any IP SANs
Se você se conectar usando um endereço IP, seu certificado deverá conter uma SAN IP correspondente para passar a validação com o Go 1.3 e superior. Isto não é (ainda?) Mencionado em qualquer arquivo README ou documentação, mas existem alguns problemas ( # 226 , # 221 ) aberto no projeto github repo.
Para permitir o endereço IP como o nome do servidor, o certificado SSL deve incluir o endereço IP como um campo subjectAltName
.
Para resolver isso, você pode usar o seguinte procedimento para a criação do certificado SSL e chave:
-
Crie um arquivo
notsec.cfr
(ou qualquer outro nome) contendo saída como:[req] distinguished_name = req_distinguished_name x509_extensions = v3_req prompt = no [req_distinguished_name] C = TG ST = Togo L = Lome O = Private company CN = * [v3_req] subjectKeyIdentifier = hash authorityKeyIdentifier = keyid,issuer basicConstraints = CA:TRUE subjectAltName = @alt_names [alt_names] DNS.1 = * DNS.2 = *.* DNS.3 = *.*.* DNS.4 = *.*.*.* DNS.5 = *.*.*.*.* DNS.6 = *.*.*.*.*.* DNS.7 = *.*.*.*.*.*.* IP.1 = 192.168.1.1 IP.2 = 192.168.69.14
Se você se conectar por meio de nomes de host, poderá remover as SANs IP, caso contrário, adicione o endereço IP do seu servidor logstash.
-
Crie o certificado e a chave com o seguinte comando (usando o arquivo do ponto 1):
openssl req -x509 -batch -nodes -newkey rsa:2048 -keyout notsecure.key -out notsecure.crt -config notsec.cnf -days 1825
Isso criará um tipo de certificado curinga que aceita qualquer nome de host e os endereços IP mencionaram esse arquivo. Claro que este é apenas um exemplo simples e você precisará ajustar as configurações às suas necessidades.