尝试将我的 jabber 客户端(pidgin)连接到具有自签名证书的 jabber 服务器时,出现“无法验证证书”错误。
由于无法告诉客户端不要验证链,因此我希望获取证书链以便将其导入那里。因此我使用:
openssl s_client -connect my.jabber.server.net:5222 </dev/null
我得到以下答案:
openssl s_client-连接 cup1.sprachdienst.fraunhofer.de:5222
> CONNECTED(00000003) 140472458057376:error:140790E5:SSL
> routines:SSL23_WRITE:ssl handshake failure:s23_lib.c:177:
> --- no peer certificate available
> --- No client certificate CA names sent
> --- SSL handshake has read 0 bytes and written 213 bytes
> --- New, (NONE), Cipher is (NONE) Secure Renegotiation IS NOT supported Compression: NONE Expansion: NONE
> ---
为什么我的 jabber 客户端可以获取证书链,但我却获取不到?
答案1
解决方案是:Jabber 需要 starttls:
openssl s_client -connect my.jabber.server.net:5222 </dev/null -starttls xmpp
返回证书
答案2
正如前面的回答中提到的,Jabber/XMPP 需要-starttls
。
客户端到服务器 (c2s) 证书为了my.jabber.server.net
。
openssl s_client -connect my.jabber.server.net:5222 </dev/null -starttls xmpp
为了进一步解释这个答案,有两种类型的连接:
- 普通客户端登录:
-starttls xmpp
,默认端口 5222 - 服务器之间的连接:
-starttls xmpp-server
,默认端口5269
服务器到服务器 (s2s) 证书为了my.jabber.server.net
。
openssl s_client -connect my.jabber.server.net:5269 </dev/null -starttls xmpp-server
使用openssl
v1.1.0+,您还可以检查自定义域,使用-xmpphost <domain>
标记,或者使用选项别名-name
在openssl
v1.1.1+ 中。
自定义域的客户端到服务器 (c2s) 证书 other.example.org
由主办my.jabber.server.net
:
openssl s_client -connect my.jabber.server.net:5222 </dev/null -starttls xmpp -xmpphost other.example.org
自定义域的服务器到服务器 (s2s) 证书 other.example.org
由主办my.jabber.server.net
:
openssl s_client -connect my.jabber.server.net:5269 </dev/null -starttls xmpp-server -xmpphost other.example.org
答案3
简单的方法,
- 关闭 皮钦语
- 找到您的证书文件夹 (
Windows: %appdata%\.purple
)(Linux:/home/<Username>/.purple/certificates/x509/tls_peers
) - 删除证书文件夹中的所有内容。
- 重新启动 pidgin,最终您将获得一个可用的新证书。
PS:不熟悉的 Windows 用户%appdata%
只需%appdata%\.purple
在地址栏中输入并按回车键即可。
答案4
使用以下命令生成自签名证书对我有用:
openssl req -x509 -newkey rsa:4096 -sha256 -days 3650 -nodes -keyout example.key -out example.crt -subj /CN=example.com -addext subjectAltName=DNS:example.com,DNS:example.net,IP:10.0.0.1
(找到命令这里)