gpt4 book ai didi

linux - 在 Linux 7.2 上自签名的证书验证失败

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:45:15 24 4
gpt4 key购买 nike

我看过无数关于认证错误的帖子,基本上都是说要么关闭验证,要么修复你的证书。然而,在我们的项目中,我们真的想使用证书做什么,但我们无法让它发挥作用。 SA 和 2 个程序员已经尝试了我们能想到的一切,但没有任何效果。很明显,我们不知道自己在做什么。

首先,这是我们在一个简单的连接和获取 perl 程序上得到的错误。 WEBHOSTNAME 替换真实的网络主机名。

perl -MIO::Socket::SSL=debug30 testerTut2.pl
DEBUG: .../IO/Socket/SSL.pm:1784: new ctx 46260896
DEBUG: .../IO/Socket/SSL.pm:446: socket not yet connected
DEBUG: .../IO/Socket/SSL.pm:448: socket connected
DEBUG: .../IO/Socket/SSL.pm:466: ssl handshake not started
DEBUG: .../IO/Socket/SSL.pm:501: using SNI with hostname WEBHOSTNAME
DEBUG: .../IO/Socket/SSL.pm:524: set socket to non-blocking to enforce timeout=10
DEBUG: .../IO/Socket/SSL.pm:537: Net::SSLeay::connect -> -1
DEBUG: .../IO/Socket/SSL.pm:547: ssl handshake in progress
DEBUG: .../IO/Socket/SSL.pm:557: waiting for fd to become ready: SSL wants a read first
DEBUG: .../IO/Socket/SSL.pm:577: socket ready, retrying connect
DEBUG: .../IO/Socket/SSL.pm:1772: ok=0 cert=46303216
DEBUG: .../IO/Socket/SSL.pm:537: Net::SSLeay::connect -> -1
DEBUG: .../IO/Socket/SSL.pm:1408: SSL connect attempt failed with unknown error

DEBUG: .../IO/Socket/SSL.pm:543: fatal SSL error: SSL connect attempt failed with unknown error error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
DEBUG: .../IO/Socket/SSL.pm:1821: free ctx 46260896 open=46260896
DEBUG: .../IO/Socket/SSL.pm:1826: free ctx 46260896 callback
DEBUG: .../IO/Socket/SSL.pm:1829: OK free ctx 46260896
500 Can't connect to WEBHOSTNAME:443 at testerTut2.pl line 34.

这是 perl 程序:

#!/bin/perl
require LWP::UserAgent;
use LWP::Protocol::https;

#note USERNAME is where the real account name goes
my $ua = LWP::UserAgent->new( ssl_opts => { verify_hostname => 1, SSL_ca_file => '/home/USERNAME/ca-bundle.crt'});
$ua->timeout(10);
$ua->env_proxy;

#note hostname is where the real web host name goes
my $response = $ua->get('https://hostname/tut/ops/data/newtut.dat');
if ($response->is_success)
{
print $response->content;
print $response->decoded_content; # or whatever
}
else
{
die $response->status_line;
}

SA 已在 Web 服务器上制作了签名证书。再次将 webhostname 替换为真实的 web 主机名。

openssl s_client -connect lomweb01:443 -showcerts
WARNING: can't open config file: /usr/local/ssl/openssl.cnf
CONNECTED(00000003)
depth=0 C = US, ST = MD, L = Greenbelt, O = NASA, OU = MMS, CN = webhostname.edtfmmslinux.ecs.nasa.gov
verify error:num=18:self signed certificate
verify return:1
depth=0 C = US, ST = MD, L = Greenbelt, O = NASA, OU = MMS, CN = webhostname.edtfmmslinux.ecs.nasa.gov
verify return:1
---
Certificate chain
0 s:/C=US/ST=MD/L=Greenbelt/O=NASA/OU=MMS/CN=webhostname .edtfmmslinux.ecs.nasa.gov
i:/C=US/ST=MD/L=Greenbelt/O=NASA/OU=MMS/CN=webhostname .edtfmmslinux.ecs.nasa.gov
-----BEGIN CERTIFICATE-----
MIIDbDCCAlQC etc etc k7Pr1nRQG
3/NKQVqaSITGHGZBtlKjpw==
-----END CERTIFICATE-----
---
Server certificate
subject=/C=US/ST=MD/L=Greenbelt/O=NASA/OU=MMS/CN=webhostname .edtfmmslinux.ecs.nasa.gov
issuer=/C=US/ST=MD/L=Greenbelt/O=NASA/OU=MMS/CN=webhostname .edtfmmslinux.ecs.nasa.gov
---
No client certificate CA names sent
---
SSL handshake has read 1639 bytes and written 711 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-GCM-SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : TLSv1.2
Cipher : ECDHE-RSA-AES256-GCM-SHA384
Session-ID: 921941EFFB19FA3158C751D155C012D5A418425BFAE94FEA1D99231A3CEF5D3C
Session-ID-ctx:
Master-Key: 13BFF7BE2B8ED18056BA54415026FC1ED133F47BADE2683A5EB3A2FED15F34ABD3F837985A498404A948B7F5B1F4774B
Key-Arg : None
PSK identity: None
PSK identity hint: None
SRP username: None
TLS session ticket lifetime hint: 300 (seconds)
TLS session ticket:
0000 - d6 99 6e 28 8c 86 5e 9b-e2 e8 etc. etc.
00b0 - 20 96 ea 05 9

Start Time: 1466432096
Timeout : 300 (sec)
Verify return code: 18 (self signed certificate)
---

在客户端上,我在 USERNAME 主目录中创建了一个本地 ca-bundle.crt 文件。我“cp/etc/pki/tls/certs/WEBSERVER.crt ~/ca-bundle.crt”并让 perl 脚本将 SSL_ca_file 值设置为其路径。

Apache 配置文件已更新为使用/etc/pki/tls/cert/WEBSERVER.crt 文件并重新启动。

它仍然不起作用。我们尝试了不同的 Web 主机名模式,但没有任何变化。我们不知道为什么证书不起作用,但我们认为我们正确地遵循了说明。 Firefox 在我们接受证书后很高兴,但 perl 却不高兴。那么我们做错了什么?

最佳答案

跟踪 perl 脚本后发现是 sybase。 sybase 客户端带有不兼容的 openssl 版本。 Net::SSLeay 是 openssl 的接口(interface)。 IO::Socket::SSL 使用 Net::SSLLeay,LWP::UserAgent 使用 IO::Socket::SSL。运行perl脚本时,PATH前面有sybase目录。 sybase 有自己的 CA 文件,这些文件与 CA RHEL 7 不兼容/过时,它首先读取 sybase CA,在它到达 ca.pem 时把所有东西都弄乱了。为了解决这个问题,我们更改了 perl 脚本以从 PATH 中删除 sybase 目录,然后 SSL_ca_file 选项就可以正常工作了。

my $ua = LWP::UserAgent->new( ssl_opts => { verify_hostname => 1, SSL_ca_file => '/home/<server account>/certs/ca.pem'});

这是自从转向 RHEL 7 以来我们遇到的第二个 sybase 副作用。另一个是 sybase 将文件描述符限制增加到 4096 而不是标准的 1024,导致硬编码为 1024 的数组发生边界溢出。

关于linux - 在 Linux 7.2 上自签名的证书验证失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37925246/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com