首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >读取X.509密钥或证书文件时出错:分析时出错

读取X.509密钥或证书文件时出错:分析时出错
EN

Stack Overflow用户
提问于 2017-07-06 17:40:01
回答 1查看 10K关注 0票数 1

我正在为我的nifi服务器设置证书身份验证。

我使用了来自nifi projectnifi-tools/tls-toolkit来生成密钥库、信任库、客户端证书等。

我已经将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 verified OK Enter PEM pass phrase:

PEM密码短语为空。

为了测试它,我尝试了

curl --insecure --cert-type pem --cert "a.pem" "https://127.0.0.1:9443/nifi" curl: (35) error reading X.509 key or certificate file: Error in parsing.

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

让我们验证一下..。

openssl verify a.pem a.pem: DC = com, DC = nifi, CN = admin error 20 at 0 depth lookup:unable to get local issuer certificate

使用该CA文件进行验证...

openssl verify -verbose -x509_strict -issuer_checks -CAfile nifi-cert.pem a.pem a.pem: OK

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

代码语言:javascript
复制
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

`

我得到..。

代码语言:javascript
复制
/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>'

怎么了?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-07 00:37:58

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

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

代码语言:javascript
复制
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中使用该标志的更多信息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44945243

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档