什么是 OpenSSL?
OpenSSL 是一个开源软件加密库,应用程序广泛使用它来使用传输层安全 (TLS) 和安全套接字层 (SSL) 协议对计算机网络上的通信进行加密。 获得许可 Apache License 2.0,因此您可以将其用于商业和非商业目的。
OpenSSL 可用于大多数类 Unix 操作系统(Solaris、LinuxmacOS 和 BSD)、OpenVMS 和 Windows. 您可以使用它来生成证书签名请求 (CSR) 或私钥,以及安装和转换 SSL 证书。 它还包括带有非常有用的工具的命令行实用程序。 本文报告了如何利用 OpenSSL 来验证与服务器的安全连接。
使用 OpenSSL 测试 SSL 连接
以前的要求
- 网络连接。
- 终端接入。
- OpenSSL 安装在您选择的操作系统上。
- 服务器的域名或主机名。
如果您使用的是 Unix/,默认情况下将安装 OpenSSLLinux 操作系统平台。 但是,如果您想在 Windows 上使用 OpenSSL,您应该查看 Cygwin 或 Windows 子系统用于 Linux.
Cygwin 是 GNU 和开源工具的一个大集合,允许您拥有类似于 Linux 分布在你的 Windows 安装。 Windows 子系统用于 Linux (WSL) 是一个官方实现 Microsoft 它允许开发人员运行大部分 GNU/Linux 环境设施和应用 Windows 直接无需虚拟机或双启动。
使用 OpenSSL 测试网络连接
首先,检查您的 OpenSSL 版本。 为此,请运行以下命令。
$ openssl version
您将收到以下结果。
freddy@freddy-vm:~$ openssl version
OpenSSL 3.0.2 15 Mar 2022 (Library: OpenSSL 3.0.2 15 Mar 2022)
如果需要更多详细信息,可以添加 -a 标志。
freddy@freddy-vm:~$ openssl version -a
OpenSSL 3.0.2 15 Mar 2022 (Library: OpenSSL 3.0.2 15 Mar 2022)
built on: Mon Jul 4 11:20:23 2022 UTC
platform: debian-amd64
options: bn(64,64)
compiler: gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -Wa,--noexecstack -g -O2 -ffile-prefix-map=/build/openssl-Q8dQt3/openssl-3.0.2=. -flto=auto -ffat-lto-objects -flto=auto -ffat-lto-objects -fstack-protector-strong -Wformat -Werror=format-security -DOPENSSL_TLS_SECURITY_LEVEL=2 -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_BUILDING_OPENSSL -DNDEBUG -Wdate-time -D_FORTIFY_SOURCE=2
OPENSSLDIR: "/usr/lib/ssl"
ENGINESDIR: "/usr/lib/x86_64-linux-gnu/engines-3"
MODULESDIR: "/usr/lib/x86_64-linux-gnu/ossl-modules"
Seeding source: os-specific
CPUINFO: OPENSSL_ia32cap=0xfffa32034f8bffff:0x27ab
该服务器正在运行 Ubuntu 22.04 LTS 操作系统和 OpenSSL 版本 3.0.2,但以下命令也适用于旧版本的 OpenSSL。
要查看所有可用选项,请通过运行 openssl help 命令使用帮助工具。
freddy@freddy-vm:~$ openssl help
help:
Standard commands
asn1parse ca ciphers cmp
cms crl crl2pkcs7 dgst
dhparam dsa dsaparam ec
ecparam enc engine errstr
fipsinstall gendsa genpkey genrsa
help info kdf list
mac nseq ocsp passwd
pkcs12 pkcs7 pkcs8 pkey
pkeyparam pkeyutl prime rand
rehash req rsa rsautl
s_client s_server s_time sess_id
smime speed spkac srp
storeutl ts verify version
x509
Message Digest commands (see the `dgst' command for more details)
blake2b512 blake2s256 md4 md5
rmd160 sha1 sha224 sha256
sha3-224 sha3-256 sha3-384 sha3-512
sha384 sha512 sha512-224 sha512-256
shake128 shake256 sm3
Cipher commands (see the `enc' command for more details)
aes-128-cbc aes-128-ecb aes-192-cbc aes-192-ecb
aes-256-cbc aes-256-ecb aria-128-cbc aria-128-cfb
aria-128-cfb1 aria-128-cfb8 aria-128-ctr aria-128-ecb
aria-128-ofb aria-192-cbc aria-192-cfb aria-192-cfb1
aria-192-cfb8 aria-192-ctr aria-192-ecb aria-192-ofb
aria-256-cbc aria-256-cfb aria-256-cfb1 aria-256-cfb8
aria-256-ctr aria-256-ecb aria-256-ofb base64
bf bf-cbc bf-cfb bf-ecb
bf-ofb camellia-128-cbc camellia-128-ecb camellia-192-cbc
camellia-192-ecb camellia-256-cbc camellia-256-ecb cast
cast-cbc cast5-cbc cast5-cfb cast5-ecb
cast5-ofb des des-cbc des-cfb
des-ecb des-ede des-ede-cbc des-ede-cfb
des-ede-ofb des-ede3 des-ede3-cbc des-ede3-cfb
des-ede3-ofb des-ofb des3 desx
rc2 rc2-40-cbc rc2-64-cbc rc2-cbc
rc2-cfb rc2-ecb rc2-ofb rc4
rc4-40 seed seed-cbc seed-cfb
seed-ecb seed-ofb sm4-cbc sm4-cfb
sm4-ctr sm4-ecb sm4-ofb
如需其他帮助,请参阅使用以下命令之一的信息和手册页。
freddy@freddy-vm:~$ man openssl
freddy@freddy-vm:~$ info openssl
使用 OpenSSL 测试服务器连接
测试连接到端口 443
s_client 命令用于分析客户端到服务器的通信。 例如,它有助于确定端口是否打开、是否可以接受安全连接、存在哪种类型的 SSL 证书以及何时过期。
这是最基本的语法。
$ openssl s_client -connect <URL or IP>:<port>
对于 URL 或 IP 部分,请使用您的 URL 或 IP 地址。 该端口应该是您要测试的端口。 所以,对于域 example.org,命令和后续输出如下所示。
freddy@freddy-vm:~$ openssl s_client -connect example.org:443
CONNECTED(00000003)
depth=2 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert Global Root CA
verify return:1
depth=1 C = US, O = DigiCert Inc, CN = DigiCert TLS RSA SHA256 2020 CA1
verify return:1
depth=0 C = US, ST = California, L = Los Angeles, O = InternetC2A0CorporationC2A0forC2A0AssignedC2A0NamesC2A0andC2A0Numbers, CN = www.example.org
verify return:1
---
Certificate chain
0 s:C = US, ST = California, L = Los Angeles, O = InternetC2A0CorporationC2A0forC2A0AssignedC2A0NamesC2A0andC2A0Numbers, CN = www.example.org
i:C = US, O = DigiCert Inc, CN = DigiCert TLS RSA SHA256 2020 CA1
a:PKEY: rsaEncryption, 2048 (bit); sigalg: RSA-SHA256
v:NotBefore: Mar 14 00:00:00 2022 GMT; NotAfter: Mar 14 23:59:59 2023 GMT
1 s:C = US, O = DigiCert Inc, CN = DigiCert TLS RSA SHA256 2020 CA1
i:C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert Global Root CA
a:PKEY: rsaEncryption, 2048 (bit); sigalg: RSA-SHA256
v:NotBefore: Apr 14 00:00:00 2021 GMT; NotAfter: Apr 13 23:59:59 2031 GMT
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIHRzCCBi+gAwIBAgIQD6pjEJMHvD1BSJJkDM1NmjANBgkqhkiG9w0BAQsFADBP
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMSkwJwYDVQQDEyBE
aWdpQ2VydCBUTFMgUlNBIFNIQTI1NiAyMDIwIENBMTAeFw0yMjAzMTQwMDAwMDBa
Fw0yMzAzMTQyMzU5NTlaMIGWMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZv
cm5pYTEUMBIGA1UEBxMLTG9zIEFuZ2VsZXMxQjBABgNVBAoMOUludGVybmV0wqBD
b3Jwb3JhdGlvbsKgZm9ywqBBc3NpZ25lZMKgTmFtZXPCoGFuZMKgTnVtYmVyczEY
MBYGA1UEAxMPd3d3LmV4YW1wbGUub3JnMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
MIIBCgKCAQEAlV2WY5rlGn1fpwvuBhj0nVBcNxCxkHUG/pJG4HvaJen7YIZ1mLc7
/P4snOJZiEfwWFTikHNbcUCcYiKG8JkFebZOYMc1U9PiEtVWGU4kuYuxiXpD8oMP
in1B0SgrF7gKfO1//I2weJdAUjgZuXBCPAlhz2EnHddzXUtwm9XuOLO/Y6LATVMs
bp8/lXnfo/bX0UgJ7C0aVqOu07A0Vr6OkPxwWmOvF3cRKhVCM7U4B51KK+IsWRLm
8cVW1IaXjwhGzW7BR6EI3sxCQ4Wnc6HVPSgmomLWWWkIGFPAwcWUB4NC12yhCO5i
W/dxNMWNLMRVtnZAyq6FpZ8wFK6j4OMwMwIDAQABo4ID1TCCA9EwHwYDVR0jBBgw
FoAUt2ui6qiqhIx56rTaD5iyxZV2ufQwHQYDVR0OBBYEFPcqCdAkWxFx7rq+9D4c
PVYSiBa7MIGBBgNVHREEejB4gg93d3cuZXhhbXBsZS5vcmeCC2V4YW1wbGUubmV0
ggtleGFtcGxlLmVkdYILZXhhbXBsZS5jb22CC2V4YW1wbGUub3Jngg93d3cuZXhh
bXBsZS5jb22CD3d3dy5leGFtcGxlLmVkdYIPd3d3LmV4YW1wbGUubmV0MA4GA1Ud
DwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwgY8GA1Ud
HwSBhzCBhDBAoD6gPIY6aHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0
VExTUlNBU0hBMjU2MjAyMENBMS00LmNybDBAoD6gPIY6aHR0cDovL2NybDQuZGln
aWNlcnQuY29tL0RpZ2lDZXJ0VExTUlNBU0hBMjU2MjAyMENBMS00LmNybDA+BgNV
HSAENzA1MDMGBmeBDAECAjApMCcGCCsGAQUFBwIBFhtodHRwOi8vd3d3LmRpZ2lj
ZXJ0LmNvbS9DUFMwfwYIKwYBBQUHAQEEczBxMCQGCCsGAQUFBzABhhhodHRwOi8v
b2NzcC5kaWdpY2VydC5jb20wSQYIKwYBBQUHMAKGPWh0dHA6Ly9jYWNlcnRzLmRp
Z2ljZXJ0LmNvbS9EaWdpQ2VydFRMU1JTQVNIQTI1NjIwMjBDQTEtMS5jcnQwCQYD
VR0TBAIwADCCAXwGCisGAQQB1nkCBAIEggFsBIIBaAFmAHUA6D7Q2j71BjUy51co
vIlryQPTy9ERa+zraeF3fW0GvW4AAAF/ip6hdQAABAMARjBEAiAxePNT60Z/vTJT
PVryiGzXrLxCNJQqteULkguBEMbG/gIgR3QwvILJIWAUfvSfJQ/zMmqr2JDanWE8
uzbC4EWbcwAAdQA1zxkbv7FsV78PrUxtQsu7ticgJlHqP+Eq76gDwzvWTAAAAX+K
nqF8AAAEAwBGMEQCIDspTxwkUBpEoeA+IolNYwOKl9Yxmwk816yd0O2IJPZcAiAV
8TWhoOLiiqGKnY02CdcGXOzAzC7tT6m7OtLAku2+WAB2ALNzdwfhhFD4Y4bWBanc
EQlKeS2xZwwLh9zwAw55NqWaAAABf4qeoYcAAAQDAEcwRQIgKR7qwPLQb6UT2+S7
w7uQsbsDZfZVX/g8FkBtAltaTpACIQDLdtedRNGNhuzYpB6gmBBydhtSQi5YZLsp
FvaVHpeW1zANBgkqhkiG9w0BAQsFAAOCAQEAqp++XZEbreROTsyPB2RENbStOxM/
wSnYtKvzQlFJRjvWzx5Bg+ELVy+DaXllB29ZA4xRlIkYED4eXO26PY5PGhSS0yv/
1JjLp5MOvLcbk6RCQkbZ5bEaa2gqmy5IqS8dKrDj+CCUVIFQLu7X4CB6ey5n+/rY
F6Rb3MoAYu8jr3pY8Hp0DL1NQ/GMAofc464J0vf6NzzSS6sE5UOl0lURDkGHXzio
5XpeTEa4tvo/w0vNQDX/4KRxdArBIIvjVEeE1Ri9UZtAXd1CMBLROqVjmq+QCNYb
0XELBnGQ666tr7pfx9trHniitNEGI6dj87VD+laMUBd7HBtOEGsiDoRSlA==
-----END CERTIFICATE-----
subject=C = US, ST = California, L = Los Angeles, O = InternetC2A0CorporationC2A0forC2A0AssignedC2A0NamesC2A0andC2A0Numbers, CN = www.example.org
issuer=C = US, O = DigiCert Inc, CN = DigiCert TLS RSA SHA256 2020 CA1
---
No client certificate CA names sent
Peer signing digest: SHA256
Peer signature type: RSA-PSS
Server Temp Key: ECDH, prime256v1, 256 bits
---
SSL handshake has read 3772 bytes and written 739 bytes
Verification: OK
---
New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384
Server public key is 2048 bit
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
Verify return code: 0 (ok)
---
---
Post-Handshake New Session Ticket arrived:
SSL-Session:
Protocol : TLSv1.3
Cipher : TLS_AES_256_GCM_SHA384
Session-ID: 24DCEA127E089EC6D5935D6CFB78B37E77DEFC7A653B2308D11146FBF05CDB32
Session-ID-ctx:
Resumption PSK: C5A6FF368C81F70319AF99E8377B63BC4CADF3E131D61F112F8CB751BBB623DE96B4662C876C3A39351509B0DEEFACEE
PSK identity: None
PSK identity hint: None
SRP username: None
TLS session ticket lifetime hint: 7200 (seconds)
TLS session ticket:
0000 - a1 c7 6a d7 5b 6c 83 5c-f3 92 f6 0f 23 c8 c5 c3 ..j.[l.....#...
0010 - 29 d3 5b a4 50 6d b7 93-96 e2 68 40 93 52 22 54 ).[[email protected]"T
0020 - 8d 4a cf bf cb 02 56 6f-1b 4b 08 05 af bf 1b dd .J....Vo.K......
0030 - 52 0d 3e 2a d5 4a 90 de-d9 1b f4 5d f8 06 d4 db R.>*.J.....]....
0040 - a4 66 7c 77 b2 73 72 02-5a ae 68 3d 61 54 c0 62 .f|w.sr.Z.h=aT.b
0050 - 00 74 81 b1 47 38 cd fc-4a 14 d4 7c 83 43 f8 9c .t..G8..J..|.C..
0060 - ce 08 f2 a0 68 52 f5 66-37 c5 4f 9d 88 c4 93 c1 ....hR.f7.O.....
0070 - 18 61 c1 b5 01 1c 3a 6e-9c 53 0f eb cd ed da a7 .a....:n.S......
0080 - af f5 84 ed 4b fb c5 fd-98 e4 ed dd e2 44 e5 51 ....K........D.Q
0090 - 0e d9 f5 0d 6b f5 11 75-88 c8 2c da 74 dc d1 a8 ....k..u..,.t...
00a0 - 65 10 4b e0 df 1e c7 2e-b0 16 8e dc 06 19 1d 34 e.K............4
00b0 - 19 04 b7 10 d6 95 6d 2b-64 b4 ea e3 99 d8 0b c1 ......m+d.......
Start Time: 1666844343
Timeout : 7200 (sec)
Verify return code: 0 (ok)
Extended master secret: no
Max Early Data: 0
---
read R BLOCK
---
Post-Handshake New Session Ticket arrived:
SSL-Session:
Protocol : TLSv1.3
Cipher : TLS_AES_256_GCM_SHA384
Session-ID: D23A9980357E2CF2B9DAA63C022E57C06C588022E981A86D0997D15DFED3DFC5
Session-ID-ctx:
Resumption PSK: A31A023F56B24CA274F6267C496A72E0777BCB5EC8C2590275531FB26B23E86736CE59C40ABB52556B81120FB46BA105
PSK identity: None
PSK identity hint: None
SRP username: None
TLS session ticket lifetime hint: 7200 (seconds)
TLS session ticket:
0000 - a1 c7 6a d7 5b 6c 83 5c-f3 92 f6 0f 23 c8 c5 c3 ..j.[l.....#...
0010 - 46 94 9b 6f 98 3f 52 72-e4 06 c4 51 24 78 5e 62 F..o.?Rr...Q$x^b
0020 - fa 63 aa 37 ad 09 ea b9-38 16 14 85 10 85 1e 2d .c.7....8......-
0030 - b0 89 44 97 63 f3 08 5b-6a f8 bc 99 31 8d 1b 81 ..D.c..[j...1...
0040 - 2a 29 36 9c 09 5c e6 35-53 8d 30 d5 5a d2 da a4 *)6...5S.0.Z...
0050 - 04 c6 c7 f5 d8 f7 84 15-02 22 ce 95 72 d5 97 e2 ........."..r...
0060 - 16 7b e2 06 db e3 2f 27-a7 83 72 67 1a e3 cb 21 .{..../'..rg...!
0070 - e7 0a 51 d5 fa d8 8e 2f-77 6d 2a 17 49 a8 27 b4 ..Q..../wm*.I.'.
0080 - 07 c3 f1 d5 ca 49 93 e2-1b 2d c5 d3 95 e2 ea fd .....I...-......
0090 - 44 a4 95 9d e0 d9 d8 af-92 b6 d0 ec bc 20 75 a0 D............ u.
00a0 - 5e 8b 55 2f 5a 31 e5 a6-cc e6 98 7d 5b ac 30 d8 ^.U/Z1.....}[.0.
00b0 - aa 95 cc c5 1a c2 4b 3a-ff ed d9 bf af 91 ef bd ......K:........
00c0 - 82 bf 31 1c d0 21 92 f9-9a 59 08 26 b2 79 4f 9c ..1..!...Y.&.yO.
Start Time: 1666844343
Timeout : 7200 (sec)
Verify return code: 0 (ok)
Extended master secret: no
Max Early Data: 0
---
read R BLOCK
您会注意到您的光标位于输出下方,而不是新行。 这是因为 OpenSSL 仍连接到服务器并正在等待更多命令。 你可以在你的 HTTP 请求中发送一个 HEAD 命令,例如 example. 为此,请键入以下内容。
HEAD / HTTP/1.1
按 Enter 一次,然后以与下面相同的方式再次输入您的域名,交换 example.org 与您的域。
Host: example.org
按 Enter 再次查看输出。
[truncated for space reasons]
read R BLOCK
HEAD / HTTP/1.1
Host: example.org
HTTP/1.1 200 OK
Content-Encoding: gzip
Accept-Ranges: bytes
Age: 234808
Cache-Control: max-age=604800
Content-Type: text/html; charset=UTF-8
Date: Thu, 27 Oct 2022 10:54:56 GMT
Etag: "3147526947"
Expires: Thu, 03 Nov 2022 10:54:56 GMT
Last-Modified: Thu, 17 Oct 2019 07:18:26 GMT
Server: ECS (dcb/7EA3)
X-Cache: HIT
Content-Length: 648
与端口 443 的成功 OpenSSL 测试连接提供了相当多的信息,例如证书链、正在使用的密码、使用的 TLS 协议版本以及整个 SSL 握手过程。 如果您尝试发送 HEAD 请求并收到 HTTP/1.1 400 错误请求错误,您应该添加 -crlf 标志。 这个标志将帮助服务器了解我们正在尝试做什么。
freddy@freddy-vm:~$ openssl s_client -connect example.org:443 -crlf
你可以按 CTRL + C 退出或插入 echo 命令,这将在验证后立即终止与服务器的 OpenSSL 测试连接。
如果无法建立连接,输出会是什么?
如果端口已关闭或 Web 服务器已关闭,您会得到类似的结果。
freddy@freddy-vm:~$ openssl s_client -connect example.org:443 -tls1_2
4037C54E1A7F0000:error:8000006F:system library:BIO_connect:Connection refused:../crypto/bio/bio_sock2.c:125:calling connect()
4037C54E1A7F0000:error:10000067:BIO routines:BIO_connect:connect error:../crypto/bio/bio_sock2.c:127:
connect:errno=111
您的测试 OpenSSL 连接可以更短吗?
是的。您可以通过添加 -brief 标志来实现此目的,该标志排除了大部分输出。
freddy@freddy-vm:~$ openssl s_client -connect example.org:443 -brief
CONNECTION ESTABLISHED
Protocol version: TLSv1.3
Ciphersuite: TLS_AES_256_GCM_SHA384
Peer certificate: C = US, ST = California, L = Los Angeles, O = InternetC2A0CorporationC2A0forC2A0AssignedC2A0NamesC2A0andC2A0Numbers, CN = www.example.org
Hash used: SHA256
Signature type: RSA-PSS
Verification: OK
Server Temp Key: ECDH, prime256v1, 256 bits
所以在这种情况下,端口是打开的,我们可以建立连接。 但连接是通过安全端口建立的这一事实并不意味着证书有效。
如果您的证书已过期,例如证书的主机名与您的域不匹配,它仍会向您显示上述输出,即使您的访问者在他们的浏览器中收到安全警告。
证书到期日期
另一个有用的 OpenSSL 命令是 x509。 如果使用 -date 标志将 s_client 的输出通过管道传输到 x509,则可以获得证书的开始和结束日期。 此外,使用 -noout 标志来抑制加密证书的输出以节省屏幕空间。 它还将添加一个 echo 命令并使用 2>/dev/null 忽略错误以获得更清晰的输出。
freddy@freddy-vm:~$ echo | openssl s_client -connect example.org:443 2>/dev/null | openssl x509 -noout -dates
notBefore=Mar 14 00:00:00 2022 GMT
notAfter=Mar 14 23:59:59 2023 GMT
是否可以使用特定版本的 TLS 建立 OpenSSL 测试连接?
是的。您可以使用标志指定所需的 TLS 版本。 不使用小数分隔符,而是使用下划线。 标志的一些示例是 -tls1_1、-tls1_2 或 -tls1_3。 对于以下命令和后续输出,使用 OpenSSL 建立的测试 SSL 连接使用 TLS 版本 1.2。
freddy@freddy-vm:~$ echo | openssl s_client -connect example.com:443 -tls1_2 -brief
CONNECTION ESTABLISHED
Protocol version: TLSv1.2
Ciphersuite: ECDHE-RSA-AES128-GCM-SHA256
Peer certificate: C = US, ST = California, L = Los Angeles, O = InternetC2A0CorporationC2A0forC2A0AssignedC2A0NamesC2A0andC2A0Numbers, CN = www.example.org
Hash used: SHA256
Signature type: RSA-PSS
Verification: OK
Supported Elliptic Curve Point Formats: uncompressed:ansiX962_compressed_prime:ansiX962_compressed_char2
Server Temp Key: ECDH, prime256v1, 256 bits
DONE
如何检查证书的 SAN?
证书中的主题备用名称 (SAN) 允许您使用单个证书保护多个域。 您可以通过将 s_client 输出传输到 x509 命令来验证这一点。 这是正确的语法。
$ echo | openssl s_client -connect example.org:443 2>/dev/null | openssl x509 -noout -ext subjectAltName
下面是输出。
freddy@freddy-vm:~$ echo | openssl s_client -connect example.org:443 2>/dev/null | openssl x509 -noout -ext subjectAltName
X509v3 Subject Alternative Name:
DNS:www.example.org, DNS:example.net, DNS:example.edu, DNS:example.com, DNS:example.org, DNS:www.example.com, DNS:www.example.edu, DNS:www.example.net
使用 OpenSSL 测试邮件服务器连接
我们可以使用 OpenSSL 来解决使用 IMAP、POP3 和 SMTP 协议的邮件服务器的连接问题。 根据测试的端口,您需要告诉邮件服务器将连接升级为安全连接,这是通过使用 STARTTLS 命令来完成的。
什么是显式端口和隐式端口?
显式端口不会自动受到保护,只有在它们收到 STARTTLS 命令时才会启动 TLS 握手以保护连接。 您可以选择通过安全或非安全连接进行连接。
隐式端口始终受到保护,并将立即启动 TLS 握手以保护连接。 如果这不可能,则连接将被完全拒绝。
IMAP 的 OpenSSL 测试连接
以下是显式端口 143 的语法和输出。更改邮件。example.org 到您的邮件服务器的 URL。
freddy@freddy-vm:~$ openssl s_client -connect mail.example.org:143 -starttls imap -brief
CONNECTION ESTABLISHED
Protocol version: TLSv1.2
Ciphersuite: ECDHE-RSA-AES256-GCM-SHA384
Peer certificate: CN = example.org
Hash used: SHA256
Signature type: RSA
Verification: OK
Supported Elliptic Curve Point Formats: uncompressed:ansiX962_compressed_prime:ansiX962_compressed_char2
Server Temp Key: ECDH, prime256v1, 256 bits
. OK Pre-login capabilities listed, post-login capabilities have more.
以下是默认端口 993 的语法和输出。更改邮件。example.org 到您的邮件服务器的 URL。
freddy@freddy-vm:~$ openssl s_client -connect mail.example.org:993 -brief
CONNECTION ESTABLISHED
Protocol version: TLSv1.2
Ciphersuite: ECDHE-RSA-AES256-GCM-SHA384
Peer certificate: CN = example.org
Hash used: SHA256
Signature type: RSA
Verification: OK
Supported Elliptic Curve Point Formats: uncompressed:ansiX962_compressed_prime:ansiX962_compressed_char2
Server Temp Key: ECDH, prime256v1, 256 bits
* OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE IDLE NAMESPACE LITERAL+ AUTH=PLAIN AUTH=LOGIN] Dovecot ready.
POP3 的 OpenSSL 测试连接
这是显式端口 110 的语法和输出。记得更改邮件。example.org 到您的邮件服务器的 URL。
freddy@freddy-vm:~$ openssl s_client -connect mail.example.org:110 -starttls pop3 -brief
CONNECTION ESTABLISHED
Protocol version: TLSv1.2
Ciphersuite: ECDHE-RSA-AES256-GCM-SHA384
Peer certificate: CN = example.org
Hash used: SHA256
Signature type: RSA
Verification: OK
Supported Elliptic Curve Point Formats: uncompressed:ansiX962_compressed_prime:ansiX962_compressed_char2
Server Temp Key: ECDH, prime256v1, 256 bits
+OK Dovecot ready.
以下是默认端口 993 的语法和输出。更改邮件。example.org 到您的邮件服务器的 URL。
freddy@freddy-vm:~$ openssl s_client -connect mail.example.org:993 -brief
CONNECTION ESTABLISHED
Protocol version: TLSv1.2
Ciphersuite: ECDHE-RSA-AES256-GCM-SHA384
Peer certificate: CN = example.org
Hash used: SHA256
Signature type: RSA
Verification: OK
Supported Elliptic Curve Point Formats: uncompressed:ansiX962_compressed_prime:ansiX962_compressed_char2
Server Temp Key: ECDH, prime256v1, 256 bits
* OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE IDLE NAMESPACE LITERAL+ AUTH=PLAIN AUTH=LOGIN] Dovecot ready.
用于 SMTP 的测试连接 OpenSSL
以下是显式端口 25 和 587 的语法和输出。更改邮件。example.org 到您的邮件服务器的 URL。
freddy@freddy-vm:~$ openssl s_client -connect mail.example.org:25 -starttls smtp -brief
CONNECTION ESTABLISHED
Protocol version: TLSv1.2
Ciphersuite: ECDHE-RSA-AES256-GCM-SHA384
Peer certificate: CN = example.org
Hash used: SHA256
Signature type: RSA
Verification: OK
Supported Elliptic Curve Point Formats: uncompressed:ansiX962_compressed_prime:ansiX962_compressed_char2
Server Temp Key: ECDH, prime256v1, 256 bits
250 HELP
freddy@freddy-vm:~$ openssl s_client -connect mail.example.org:587 -starttls smtp -brief
CONNECTION ESTABLISHED
Protocol version: TLSv1.2
Ciphersuite: ECDHE-RSA-AES256-GCM-SHA384
Peer certificate: CN = example.org
Hash used: SHA256
Signature type: RSA
Verification: OK
Supported Elliptic Curve Point Formats: uncompressed:ansiX962_compressed_prime:ansiX962_compressed_char2
Server Temp Key: ECDH, prime256v1, 256 bits
250 HELP
以下是隐式端口 465 的语法和输出。更改邮件。example.org 到您的邮件服务器的 URL。
freddy@freddy-vm:~$ openssl s_client -connect mail.example.org:465 -brief
CONNECTION ESTABLISHED
Protocol version: TLSv1.2
Ciphersuite: ECDHE-RSA-AES256-GCM-SHA384
Peer certificate: CN = example.org
Hash used: SHA256
Signature type: RSA
Verification: OK
Supported Elliptic Curve Point Formats: uncompressed:ansiX962_compressed_prime:ansiX962_compressed_char2
Server Temp Key: ECDH, prime256v1, 256 bits
220-host.example.org ESMTP Exim 4.95 #2 Thu, 27 Oct 2022 11:41:44 -0400
220-We do not authorize the use of this system to transport unsolicited,
220 and/or bulk e-mail.
结尾
OpenSSL 是一套出色的工具,用于测试您是否与服务器建立了安全连接。 这个功能只是大多数 Unix 平台上预装的这个强大而有用的工具的一小部分。 学习使用 OpenSSL 是测试 SSL 连接的宝贵工具。
您是否希望将您的托管环境提升到一个新的水平? 考虑从 Liquid Web 托管 VPS, Cloud 专用服务器或专用服务器。 我们的托管环境具备提升下一个托管项目所需的一切。 联系我们的销售团队开始吧。