我试图产生这样的证书验证错误openssl s_client:
$ openssl s_client -crlf -verify 9 \
-CAfile /etc/ssl/certs/TURKTRUST_Certificate_Services_Provider_Root_1.pem \
-starttls smtp -host mx-ha03.web.de -port 25
Run Code Online (Sandbox Code Playgroud)
web.de服务器的证书是德国电信CA认证的,不是TURKTRUST,所以上面的命令应该会失败吧?
但它报告:
Verify return code: 0 (ok)
Run Code Online (Sandbox Code Playgroud)
为什么?
我的意思是模拟 gnutls-cli 命令按预期失败:
$ { echo -e 'ehlo example.org\nstarttls' ; sleep 1 } | \
gnutls-cli --starttls --crlf \
--x509cafile /etc/ssl/certs/TURKTRUST_Certificate_Services_Provider_Root_1.pem \
--port 25 mx-ha03.web.de
[..]
*** Verifying server certificate failed...
Run Code Online (Sandbox Code Playgroud)
进行交叉检查,即使用--x509cafile /etc/ssl/certs/ca-certificates.crtgnutls-cli代替我得到:
[..]
- The hostname in the certificate matches 'mx-ha03.web.de'.
- Peer's certificate is trusted
Run Code Online (Sandbox Code Playgroud)
(这也是预期的)
Openssl s_client …
我同时设置了两个新的 CentOS 7 机器,所以配置应该是相同的,只是 IP 地址和主机名不同。
我安装了 VSFTPD 并配置了被动端口。一个盒子连接正常,没有问题,但是第二个盒子不断向我抛出这个错误:
GnuTLS error -15: An unexpected TLS packet was received.
Run Code Online (Sandbox Code Playgroud)
这是调试 FileZilla 跟踪:
Status: Connecting to 192.168.20.68:21...
Status: Connection established, waiting for welcome message...
Trace: CFtpControlSocket::OnReceive()
Response: 220 (vsFTPd 3.0.2)
Trace: CFtpControlSocket::SendNextCommand()
Command: AUTH TLS
Trace: CFtpControlSocket::OnReceive()
Response: 234 Proceed with negotiation.
Status: Initializing TLS...
Trace: CTlsSocket::Handshake()
Trace: CTlsSocket::ContinueHandshake()
Trace: CTlsSocket::OnSend()
Trace: CTlsSocket::OnRead()
Trace: CTlsSocket::ContinueHandshake()
Trace: CTlsSocket::OnRead()
Trace: CTlsSocket::ContinueHandshake()
Trace: CTlsSocket::OnRead()
Trace: CTlsSocket::ContinueHandshake()
Trace: TLS Handshake successful
Trace: Protocol: TLS1.2, Key exchange: …Run Code Online (Sandbox Code Playgroud) 我有一个特定的 ftps 站点,我无法使用 lftp 连接到该站点。
当我尝试连接时,出现错误:
Fatal error: gnutls_handshake: An unexpected TLS packet was received
Run Code Online (Sandbox Code Playgroud)
当我使用 gnutls-cli 连接时,我找到了正确的设置来协商并实际发出 USER 命令。我要的是指向 gnutls 部分正确 lftp 配置的任何指针,以便它可以正确进行身份验证。
更新:我看到的情况是,在使用 gnutls-cli 时,它会选择要使用的正确 MAC 和密码:
|<4>| HSK[0x24073f0]: Selected cipher suite: RSA_3DES_EDE_CBC_SHA1
Run Code Online (Sandbox Code Playgroud)
与从 lftp 调用时不同的是:
GNUTLS: ENC[0x1918cd0]: cipher: NULL, MAC: MAC-NULL, Epoch: 0
Run Code Online (Sandbox Code Playgroud)
以下是我从 lftp 和 gnutls-cli 的配置和调试输出:
lftp
set ssl:priority NORMAL:+VERS-TLS1.0:+VERS-TLS1.1:+VERS-TLS1.2
set ftps:initial-prot P
set ftp:ssl-allow yes
set ftp:ssl-force yes
set ftp:ssl-protect-list yes
set ftp:ssl-protect-data yes
set ftp:ssl-protect-fxp yes
set ssl:verify-certificate no
debug …Run Code Online (Sandbox Code Playgroud) 当我跑
aria2c https://www.example.com
Run Code Online (Sandbox Code Playgroud)
我得到
02/24 15:33:38 [WARN] aria2c had to connect to the other side using an unknown TLS protocol. The integrity and confidentiality of the connection might be compromised.
Run Code Online (Sandbox Code Playgroud)
为什么是这样?请注意,这不是特定于www.example.com; 它发生在许多(如果不是所有)主机上。
作为参考,这是(已编辑的)日志:
[INFO] [Context.cc:182] aria2 1.34.0
[INFO] [Context.cc:183] gcc 8.2.1 20181127
built by x86_64-pc-linux-gnu
on Feb 8 2019 09:32:06
[INFO] [Context.cc:185] zlib/1.2.11 libxml2/2.9.9 sqlite3/3.26.0 GnuTLS/3.6.6 nettle GMP/6.1.2 c-ares/1.15.0 libssh2/1.8.0
[INFO] [Context.cc:186] Logging started.
[DEBUG] [Context.cc:216] Not setting rlimit NO_FILE: 1024 >= 1024
[NOTICE] [Context.cc:311] Downloading 1 item(s) …Run Code Online (Sandbox Code Playgroud) 我正在运行Exim MTA,它只接收来自我控制下的其他几个系统的电子邮件。所有这些系统都愉快地与我的 MTA 协商 TLSv1.2/TLSv1.3。我想禁用对 TLSv1.0 和 TLSv1.1 的支持,但我找不到有关如何执行此操作的说明。
所有软件均从官方 Debian 10 存储库(Exim 4.92、GnuTLS 3.6.6)安装。
我不断收到一个错误,如在 neomutt 中发送电子邮件的标题所示,这是我在 muttrc 中放入的内容:
set from = "myemail@domain.ca"
set realname = "my name"
set smtp_url = "smtps://myemail@domain.ca@smtp-mail.outlook.com:587"
set smtp_pass = "pass"
set imap_pass = "pass"
set ssl_starttls = "yes"
set folder = "imaps://myemail@domain@outlook.office365.com:993"
set header_cache = "~/.mutt/cache/headers"
set message_chachedir = "~/.mutt/cache/bodies"
set certificate_file = "~/.mutt/certificates"
set editor = "vim"
Run Code Online (Sandbox Code Playgroud)
到目前为止,我已经尝试将 smtp url 从 smtps 更改为 smtp,但这只会给我错误“SASL 身份验证失败”。