【发布时间】:2020-12-27 18:31:18
【问题描述】:
我需要将java服务与go app集成,可以配置指定检查TLS时使用的CA证书文件。我不熟悉go。 Java REST 端点使用自签名证书进行保护。
我正在尝试像这样使用keytool 导出它:
keytool -export -alias rootca -file ca.crt -keystore cacerts
ca.crt 文件可以通过 keytool 本身的命令检查:
keytool -printcert -v -file ca.crt
现在,当我尝试在 go 应用程序中使用此文件时,即 prometheus,通过将 tls_config 和指向导出文件的 ca_cert 值传递给我得到一个错误:
err="创建 HTTP 客户端时出错:无法使用指定的 CA 证书 /etc/prometheus/ssl/ca.crt"
Prometheus 使用 go 的标准 crypto/tls 所以我的问题是:
- 我导出 Java 文件的方式是否正确且可用?
- 如何将导出的 Java CA 文件转换为 Go 能够理解和使用的格式?
【问题讨论】:
-
证书可能是二进制格式。如果它不包含可读的标题(只需使用文本编辑器打开它),您需要将其转换为 PEM:
openssl x509 -in cert.cer -out cert.pem -
@Marc 是的,它是二进制的,但是建议的命令不起作用。它失败了
4654165440:error:0909006C:PEM routines:get_name:no start line:crypto/pem/pem_lib.c:745:Expecting: TRUSTED CERTIFICATE -
您可以告诉 openssl 实际输入格式:
openssl x509 -in cert.cer -out cert.pem -inform DER,甚至可以选择使用-outform PEM输出格式。您也可以尝试将-rfc选项改为keytool -printcert以PEM 格式输出。