Соединение с почтой Google с помощью команды openssl s_client - PullRequest
0 голосов
/ 28 января 2020

Цель - отправить электронное письмо, используя следующую команду:

openssl s_client \
  -connect smtp.gmail.com:587 \
  -starttls smtp

Для этого после подключения я отправляю необходимые команды с именем пользователя и паролем в base64:

EHLO smtp.gmail.com
AUTH LOGIN
MAIL FROM: <noreply@example.com>
RCPT TO: <*****@gmail.com>
DATA
Subject: Sending an email using telnet

Hello,
This is an email sent by using the telnet command.

Your friend,
Me!
.
QUIT

I ' m пытается понять и найти решение проблемы ниже:

RENEGOTIATING
4707790444:error:1400444C:SSL routines:CONNECT_CR_SRVR_HELLO:tlsv1 alert no renegotiation:/BuildRoot/Library/Caches/com.apple.xbs/Sources/libressl/libressl-47.11.1/libressl-2.8/ssl/ssl_pkt.c:1200:SSL alert number 100
4707790444:error:140040E5:SSL routines:CONNECT_CR_SRVR_HELLO:ssl handshake failure:/BuildRoot/Library/Caches/com.apple.xbs/Sources/libressl/libressl-47.11.1/libressl-2.8/ssl/ssl_pkt.c:585:

1 Ответ

1 голос
/ 29 января 2020

openssl s_client - инструмент, предназначенный для тестирования соединений SSL / TLS. Как таковой, он предоставляет вам различные «команды», которые имеют специальные эффекты для любого установленного соединения SSL / TLS. Большая часть введенного вами текста будет просто отправлена ​​на одноранговый узел. Но если он увидит команду, он выполнит ее. Команды начинаются в начале строки, и одной из таких команд является одна буква «R». Это приводит к тому, что s_client запрашивает повторное согласование с сервером. Ваша строка, начинающаяся с «RCPT TO», вызывает выполнение этой команды. Сервер сконфигурирован так, чтобы не принимать запросы на повторное согласование, поэтому вы видите ошибку.

Попробуйте использовать флаг "-ign_eof" для s_client. Это приводит к отключению этих команд.

...