首页 > 解决方案 > 导出 java ca 证书,以便它可以从 go 中使用

问题描述

我需要将 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,所以我的问题是:

标签: javagossl

解决方案


根据 的手册页keytool,在-exportcert命令下:

证书默认以二进制编码输出。

所讨论的编码是DER,它是证书数据的二进制表示。

但是,Go 标准库需要PEM编码,它只是 DER 数据的 base64 加上一些页眉/页脚。

你有(至少)两个选择:

告诉keytool以 PEM 格式导出

这是使用命令的-rfc标志来完成的-exportcerts。根据手册页:

如果指定了 -rfc 选项,则以 Internet RFC 1421 证书编码标准定义的可打印编码格式输出。

RFC1421是用于 PEM 的。

从 DER 转换为 PEM

这可以通过以下方式使用 openssl 来完成:

openssl -in exported_file.der -inform DER -out ca.crt

推荐阅读