java - 导出 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
,所以我的问题是:
- 我导出 Java 文件的方式是否正确且可用?
- 如何将导出的 Java CA 文件转换为 Go 能够理解和使用的格式?
解决方案
根据 的手册页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
推荐阅读
- javascript - 阻塞代码循环到非阻塞代码Node js
- r - 从 R 上的子集列表中提取和组织数据
- php - 致命错误:未捕获的错误:调用数组上的成员函数 fetch()
- reactjs - 如何将 Gatsby Link 设置为
- 标签而不是标签?
- liquid-haskell - 无法证明过滤函数的唯一细化类型
- mysql - MySQL:如何将 Select 元素重写为“y”,然后在 where 语句中使用它
- ios - 字符串无法解析为日期“Swift”
- data-structures - 如何在安全的 Rust 中遍历相互递归图?
- c++ - 对象内部的函数 oop
- excel - VBA Range.PasteSpecial xlPasteValues 出现问题