Вопрос или проблема
В течение последнего часа я читал множество разных блогов и статей, но ни одна из них не помогла мне понять, почему эта команда без -starttls
:
openssl s_client -crlf -connect mail.example.org:993
дает результат:
CONNECTED(00000003)
depth=1 /C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
verify error:num=20:unable to get local issuer certificate
verify return:0
---
Certificate chain
0 s:/CN=mail.example.org
i:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
1 s:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
i:/O=Digital Signature Trust Co./CN=DST Root CA X3
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIFXDCCBESgAwIBAgISA6BCMzfycJZwD95pvt+RnRZ7MA0GCSqGSIb3DQEBCwUA
MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD
ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0yMDEwMDYwOTU3MDRaFw0y
MTAxMDQwOTU3MDRaMB0xGzAZBgNVBAMTEm1haWwuc21hcnRsdTYzLm9yZzCCASIw
DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAO0ZmXuFsh5dqlsefcS7r/u6wwvF
YzGOiiQYP7LVWiMj1LOPtu3HULXHW6OaxUKARhguXCdp5LP23wrViX/pKbGXJPTS
+0mRNfFqmnoo6haCGPNH13JZJc9YlYBFQOd6KiiZ8jVBzN+pFZQO2YYh/JazJKy6
vmEpT5x+P5+MxFZqG6l71lCOY0YrxCElV5TJCezRdULc9h8SJwKPAst7nTZK8KA2
gmA8S6OEFJfP0BUV937gol0aPL8vMOvfkNWL3dmkjGmWERC4J4TAm5l0No/L+U67
jqb+Mjd7dpPFo0P6g6ug/IL4HpdMxF5QVY7/axLFTI6YzdBt5ffmMfnwRmkCAwEA
AaOCAmcwggJjMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYI
KwYBBQUHAwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUW7Lmg7fju54qwQlS/M6i
FWUE2C8wHwYDVR0jBBgwFoAUqEpqYwR93brm0Tm3pkVl7/Oo7KEwbwYIKwYBBQUH
AQEEYzBhMC4GCCsGAQUFBzABhiJodHRwOi8vb2NzcC5pbnQteDMubGV0c2VuY3J5
cHQub3JnMC8GCCsGAQUFBzAChiNodHRwOi8vY2VydC5pbnQteDMubGV0c2VuY3J5
cHQub3JnLzAdBgNVHREEFjAUghJtYWlsLnNtYXJ0bHU2My5vcmcwTAYDVR0gBEUw
QzAIBgZngQwBAgEwNwYLKwYBBAGC3xMBAQEwKDAmBggrBgEFBQcCARYaaHR0cDov
L2Nwcy5sZXRzZW5jcnlwdC5vcmcwggEEBgorBgEEAdZ5AgQCBIH1BIHyAPAAdgBE
lGUusO7Or8RAB9io/ijA2uaCvtjLMbU/0zOWtbaBqAAAAXT9jr8uAAAEAwBHMEUC
IQCc6wmv/LUsEFfK//Ap+36tCPPggYdSHdWbLcoJqQshHQIgbQFkBHePl3H3F+8m
T9rgVzra9njr4ZUjWfTb4KtAfFAAdgD2XJQv0XcwIhRUGAgwlFaO400TGTO/3wwv
IAvMTvFk4wAAAXT9jr8lAAAEAwBHMEUCIHON5YkbmUoa8vt3I14M4GtES63E1N4v
puoNDhBwz6oaAiEAy6Sasqsu5D/jTxNgT8OXACaH5+C4Zg1nzm+j3KdNI5AwDQYJ
KoZIhvcNAQELBQADggEBAIGKw4w+Mfji2KNKGCO/K7BVVX3zueBgSt/EHlecI/s2
4z5BFmd5bOuylH4lBSZgt12RrqPO1tz5IJbtfoiXRMstYEOAOhZHFDIhzMAYdS9K
sbAKcisJiDmro51Rt7slu1gRPipwWUfKIeRXU3HrYudctLZCLyVe8M/VaG9elFay
lDcvMsd0PH/EN8obxNSPyb2wradgx3maVT6UmS6DXmQIO24KZLppOk6K+8Jxbyfh
B1aMeqcyxhOQjLVwahaq56z+XzVP1QiyQFzsyRMKxTUyJpwWIZpImrM8+F5dxDVa
cK6XksCoGAoohgSX6zF6Aw2Gl4qTZN7xvRiI6FOg8u4=
-----END CERTIFICATE-----
subject=/CN=mail.example.org
issuer=/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
---
No client certificate CA names sent
---
SSL handshake has read 4020 bytes and written 712 bytes
---
New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : TLSv1
Cipher : DHE-RSA-AES256-SHA
Session-ID: C1697F148A98513C69BA6D10E28E5B094BD80ADAF05C480658F294D71BD15AD7
Session-ID-ctx:
Master-Key: 4626C9E4F276AB077457DB574C181F3779207A228779204E325BF747AC6E487CFD0D79847CFD5B7E07DFB02C67DC4165
Key-Arg : None
Start Time: 1602799379
Timeout : 300 (sec)
Verify return code: 0 (ok)
---
* OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE IDLE LITERAL+ AUTH=PLAIN AUTH=LOGIN] Dovecot (Debian) готов.
Но эта команда с starttls
:
openssl s_client -starttls imap -crlf -connect mail.example.org:993
дает результат:
CONNECTED(00000003)
И затем просто как бы зависает, и не кажется, что есть способ взаимодействовать с imap.
Как мне правильно протестировать порт 993, чтобы определить, 1) есть ли у меня явный или неявный TLS? и 2) определить, включен ли STARTTLS и работает ли он, если он установлен как явный?
Порт 993 определен как IMAP через TLS, т.е. неявный TLS. Этот порт всегда должен отвечать с помощью TLS рукопожатия. STARTTLS может использоваться на незащищенном порту 143, но лучшей практикой является не обслуживать этот порт вообще. Для получения дополнительной информации смотрите RFC 8314.
Вы уже правильно протестировали это! Все как ожидалось:
- Тест
openssl s_client -crlf -connect mail.example.org:993
на неявный TLS, как определено в RFC 8314, 3. Это успешно, следовательно, неявный TLS используется на порту993
. - Тест
openssl s_client -starttls imap -crlf -connect mail.example.org:993
с-starttls imap
проверяетSTARTTLS
. Он не удался, потому что STARTTLS не используется на порту993
.
STARTTLS может использоваться на порту 143
, как объяснено в ответе Майкла Хэмптона. Тем не менее, это было бы против рекомендаций RFC 8314.
Ответ или решение
Чтобы правильно протестировать подключение IMAP на порту 993, чтобы определить, используется ли неявный или явный STARTTLS, сначала необходимо уточнить несколько важных моментов.
-
Определение порта 993: Порт 993 определен как IMAP через TLS, то есть это неявный TLS. При подключении к этому порту клиент сначала устанавливает шифрованное соединение, и только после этого у него появляется возможность обмениваться данными с сервером протокола IMAP. Следовательно, тестирование на порту 993 должно сразу инициировать TLS-соединение.
-
Тестирование с помощью OpenSSL:
-
Команда
openssl s_client -crlf -connect mail.example.org:993
предназначена для проверки неявного TLS. Если вы получаете успешный вывод, как в примере, это означает, что сервер поддерживает неявный TLS на порту 993. Соединение должно быть успешно зашифровано, и дальнейшее взаимодействие с сервером может происходить в безопасном режиме. -
Команда
openssl s_client -starttls imap -crlf -connect mail.example.org:993
предназначена для проверки явного STARTTLS. Однако, поскольку порт 993 предназначен для неявного TLS, данный тест не работает. Это, как правило, связано с тем, что на этом порту SSL-соединение уже инициировано, и сервер не ожидает команды STARTTLS.
-
-
Выводы:
- Вы уже правильно провели тестирование. Ваше соединение на порт 993 подтвердило использование неявного TLS.
- Запрос на STARTTLS на порту 993 не должен выполняться, так как это противоречит спецификациям IMAP; для явного STARTTLS необходимо использовать порт 143.
-
Рекомендации:
- Если вам необходимо протестировать поддержку STARTTLS, используйте порт 143, где явный STARTTLS ожидается и поддерживается.
- Всегда лучше следовать лучшим практикам, определенным в RFC 8314, и избегать реализации STARTTLS на порту, предназначенном для неявного шифрования (в данном случае — порту 993).
Таким образом, ваше тестирование подтвердило, что на сервере по адресу mail.example.org
на порту 993 установлен неявный TLS, а возможность использования STARTTLS должна проверяться на порту 143.