ssl - 读取 X.509 key 或证书文件时出错 : Error in parsing

标签 ssl ssl-certificate apache-nifi

我正在为我的 nifi 设置证书授权服务器。

我用过nifi-tools/tls-toolkit来自 nifi project生成 keystore 、信任库、客户端证书等。

我添加了 tls-toolkit 生成的客户端证书以 p12 格式发送到我的浏览器并配置我的 nifi 服务器属性。一切正常。

现在我想在 ruby​​ 脚本中使用客户端证书。

为此,我已将证书从 p12 格式转换为 pem 格式...

openssl pkcs12 -in CN=admin_DC=nifi_DC=com.p12 -passin pass:26V+Hs1qupglToDlVqO+oKW0yWR2jG3uXjuFTUus76o -out a.pem MAC验证正常 输入 PEM 密码短语:

空白的 PEM 密码短语。

为了测试它,我试过了

curl --insecure --cert-type pem --cert "a.pem""https://127.0.0.1:9443/nifi" curl: (35) 读取 X.509 key 或证书文件时出错:解析时出错。

解析错误?我还没有找到关于它的任何信息。

让我们验证...

openssl 验证 a.pem a.pem: DC = com, DC = nifi, CN = admin 0 深度查找时出现错误 20:无法获取本地颁发者证书

用 CA 文件验证...

openssl verbose -x509_strict -issuer_checks -CAfile nifi-cert.pem a.pem a.pem:好的

我的 ruby​​ 脚本也失败了(很明显)

require 'rest_client'

a = RestClient::Resource.new(
  'https://127.0.0.1:9443/nifi',
  :ssl_client_cert  => OpenSSL::X509::Certificate.new(File.read("a.pem")),
  :verify_ssl       =>  OpenSSL::SSL::VERIFY_NONE
).get

pp a

`

我明白了...

/usr/lib/ruby/2.3.0/net/http.rb:933:in `connect_nonblock': SSL_connect returned=1 errno=0 state=unknown state: sslv3 alert bad certificate (OpenSSL::SSL::SSLError)
from /usr/lib/ruby/2.3.0/net/http.rb:933:in `connect'
from /usr/lib/ruby/2.3.0/net/http.rb:863:in `do_start'
from /usr/lib/ruby/2.3.0/net/http.rb:852:in `start'
from /var/lib/gems/2.3.0/gems/rest-client-2.0.2/lib/restclient/request.rb:715:in `transmit'
from /var/lib/gems/2.3.0/gems/rest-client-2.0.2/lib/restclient/request.rb:145:in `execute'
from /var/lib/gems/2.3.0/gems/rest-client-2.0.2/lib/restclient/request.rb:52:in `execute'
from /var/lib/gems/2.3.0/gems/rest-client-2.0.2/lib/restclient/resource.rb:51:in `get'
from test.rb:8:in `<main>'

怎么了?

谢谢。

最佳答案

我的直觉是颁发者证​​书(签署客户端证书的 Apache NiFi CA 公共(public)证书)未捆绑在导出的 PEM 文件中。此外,NiFi CA 在系统上生成,并导入到 NiFi 信任库中,但不会自动导入到 OpenSSL 信任库、JRE cacerts 或任何浏览器信任库中,因此那些工具将报告它是一个未经验证的 CA。

您能否验证导出的 PEM 是否为预期格式?一个简单的 morexxd 命令将以原始格式输出它,您可以检查文件结构。它应该看起来像这样:

hw12203:/Users/alopresto/Workspace/nifi (master) alopresto
🔓 1s @ 09:32:18 $ more ..//scratch/secure_nifi/client.pem
Bag Attributes
    friendlyName: nifi-key
    localKeyID: 4D A3 BA 01 40 32 60 6F 84 0B 1B B7 7F 1E 50 81 C7 DF 45 96
Key Attributes: <No Attributes>
Removed private key
Bag Attributes
    friendlyName: nifi-key
    localKeyID: 4D A3 BA 01 40 32 60 6F 84 0B 1B B7 7F 1E 50 81 C7 DF 45 96
subject=/OU=Apache NiFi/CN=alopresto
issuer=/OU=NIFI/CN=localhost
-----BEGIN CERTIFICATE-----
MIIDTTCCAjWgAwIBAgIKAVpj404fAAAAADANBgkqhkiG9w0BAQsFADAjMQ0wCwYD
... lines removed ...
WLvUHa29207v8ZQ6eFuTwM4OTISQIBRahxFqaluCvdQ8
-----END CERTIFICATE-----
Bag Attributes: <Empty Attributes>
subject=/OU=NIFI/CN=localhost
issuer=/OU=NIFI/CN=localhost
-----BEGIN CERTIFICATE-----
MIIDSTCCAjGgAwIBAgIKAVpj40jcAAAAADANBgkqhkiG9w0BAQsFADAjMQ0wCwYD
... lines removed ...
T7q7PHuhxvvdG4ckFMNpntxdTGIUoioZYzeijY4=
-----END CERTIFICATE-----

您可以看到那里包含两个证书 -- 第一个是我的客户端证书,第二个是签署它的 CA 的证书。

此外,您可能需要使用 -nodes 标志将私钥从 PKCS12 导出到 PEM。此标志不是表示“节点”,而是表示“无 DES 加密”,也就是“不需要密码”。您可以在 this StackOverflow answer 中查看有关使用该标志的更多信息.

关于ssl - 读取 X.509 key 或证书文件时出错 : Error in parsing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44945243/

相关文章:

hadoop - 如何从本地浏览器连接到谷歌云平台的外部IP

cluster-computing - 在 Apache NiFi 中创建双节点集群时连接被拒绝

.net - 如何确保我们从链中获得最顶层的根 CA 证书?

ubuntu 12.04 SSL 握手失败

c# - 带有客户端证书的 Xamarin Forms https 抛出 WebException

java - 为Nifi编写流媒体服务时如何解决Java的空指针异常?

google-chrome - 如何根据 HSTS header 检查网站列表?

.net - 2-Way SSL认证和请求授权

node.js - 如何为所有端口添加 ssl 安全性

windows - 用于在受信任的根证书存储上安装 SSL 证书的脚本