SSLHandshakeException в системе восстановления пароля с использованием JavaMail с проектом JSP на Tomcat 9JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 SSLHandshakeException в системе восстановления пароля с использованием JavaMail с проектом JSP на Tomcat 9

Сообщение Anonymous »

Я работаю над проектом Java JSP, развернутым на Tomcat 9, с базой данных PostgreSQL для хранения данных. Важнейшей частью этой системы является функция восстановления пароля, которая реализована с помощью JavaMail API для отправки пользователям электронных писем о восстановлении. Однако я постоянно сталкиваюсь с проблемами при отправке электронной почты из-за ошибок установления связи SSL.
Вот разбивка настроек моего проекта:
Настройка проекта:
Версия Java: OpenJDK 21.0.4 LTS (Темурин)

Код: Выделить всё

openjdk version "21.0.4" 2024-07-16 LTS
OpenJDK Runtime Environment Temurin-21.0.4+7 (build 21.0.4+7-LTS)
OpenJDK 64-Bit Server VM Temurin-21.0.4+7 (build 21.0.4+7-LTS, mixed mode, sharing)
  • Сервлеты JSP и Java: используются для внешней и внутренней логики.

    < li>Сервер: Tomcat 9, работающий в Windows, со следующими конфигурациями:
  • Путь JRE: C:\Program Files\Java\jdk1. 7.0_80\jre
  • Путь JDK: C:\Program Files\Java\jdk1.7.0_80
  • Путь Tomcat: C:\Program Files\ Apache Software Foundation\Tomcat 9.0
  • Конфигурация Catalina: C:\Program Files\Apache Software Foundation\Tomcat 9.0\conf\Catalina
[*]База данных: драйвер PostgreSQL 42.2.29 (PostgreSQL JDBC)


Основная проблема: система восстановления пароля использует отправку электронных писем через JavaMail, но я продолжаю получать ошибку подтверждения SSL всякий раз, когда система пытается отправить электронное письмо. Ниже приведено полное сообщение об ошибке:

Код: Выделить всё

javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
at sun.security.ssl.HandshakeContext.(HandshakeContext.java:171)
at sun.security.ssl.ClientHandshakeContext.(ClientHandshakeContext.java:101)
at sun.security.ssl.TransportContext.kickstart(TransportContext.java:238)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:394)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:373)
at com.sun.mail.util.SocketFetcher.configureSSLSocket(SocketFetcher.java:549)
at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:354)
at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:237)
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1927)
Эта проблема возникает всякий раз, когда система пытается подключиться к почтовому серверу через SSL для отправки писем для восстановления.
Используемые библиотеки (JAR):< /p>
  • PostgreSQL JDBC (postgresql-42.2.29.jre7.jar)
  • Bcrypt (jbcrypt-0.4.jar)< /li>
    JavaMail API (mail-1.4.7.jar, smtp-1.6.2.jar, javax.activation.jar)
  • Политики безопасности (US_export_policy .jar, local_policy.jar)
RECOVERY_ACCOUNT.JSP

Код: Выделить всё

// THIS IS THE MAIN CODE THAT IS SENDING EMAILS (RECOVERY_ACCOUNT.JSP)

// Database connection configurations
String url = "jdbc:postgresql://localhost:5432/bibliotech";
String user = "postgres";
String password = "admin";

String email = request.getParameter("email");
String passwordHash = null;

try {
// Connect to the database
Class.forName("org.postgresql.Driver");
Connection conn = DriverManager.getConnection(url, user, password);
enter code here
// Query to check if the email exists
String query = "SELECT password_hash FROM USERS WHERE email = ?";
PreparedStatement ps`enter code here`tmt = conn.prepareStatement(query);
pstmt.setString(1, email);
ResultSet rs = pstmt.executeQuery();

if (rs.next()) {
passwordHash = rs.getString("password_hash");  // Retrieve the password hash
} else {
out.println("alert('Email not found!'); window.location.href = 'recovery.jsp';");
}

rs.close();
pstmt.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}

// If the password hash was found, send an email to the user
if (passwordHash != null) {
// JavaMail configurations
String host = "smtp.gmail.com";  // Using Gmail as an example
String from = "bibliotechproject@gmail.com"; // Your email
String appPassword = "iodz fnwh idsg wmpo";  // Use a Gmail app password
String to = email;
String subject = "Password Recovery - Bibliotech";

// Email content with HTML
String messageText =
""
+ ""
+ "
[img]https://iili.io/dPzedMX.png[/img]
"
+ ""
+ "Account Recovery"
+ "
Hello,
"
+ "
We received a request to recover the password for your account.  Here are your login details:
"
+ "
Email: " + email + "
"
+ "
Password: " + passwordHash + "
"
+ "
If you did not make this request, please ignore this email.
"
+ "
Sincerely, https://prod.liveshare.vsengsaas.visualstudio.com/join?01A2BDE3A14A18BC1D1E0892E16E13D31189
"
+ "
Support Team - Bibliotech
"
+ ""
+ ""
+ "";

Properties props = System.getProperties();
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", host);
props.put("mail.smtp.user", from);
props.put("mail.smtp.password", appPassword);
props.put("mail.smtp.port", "587");
props.put("mail.debug", "true");
props.put("mail.smtp.ssl.enable", "true");
props.put("mail.smtp.auth", "true");

Session mailSession = Session.getDefaultInstance(props, null);
MimeMessage message = new MimeMessage(mailSession);

try {
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));

message.setSubject(subject);
message.setContent(messageText, "text/html");

Transport transport = mailSession.getTransport("smtp");
transport.connect(host, from, appPassword);
transport.sendMessage(message, message.getAllRecipients());
transport.close();

response.sendRedirect("send_success.jsp");
} catch (Exception e) {
e.printStackTrace();
}
}
Я добавил эти библиотеки
  • US_export_policy.jar
  • bcrypt-0.4.1.jar
  • bytes-0.4.6.jar
  • javax.activation.jar
  • jbcrypt-0.4.jar
  • local_policy.jar
  • mail-1.4.7.jar
  • postgresql-42.2.29.jre7.jar
  • smtp-1.6.2.jar
Что я пробовал:
Убедился, что на сервере и в моей конфигурации JavaMail включены правильные протоколы SSL.
Пытался обновить библиотеку JavaMail, чтобы устранить потенциальные несоответствия протоколов SSL.
Просмотрел порядок файлов JAR в папке lib, чтобы проверить наличие конфликтующих библиотек.
Оставшиеся вопросы:
Связана ли ошибка установления связи SSL с моей версией Java 21 , или это неправильная конфигурация сервера JavaMail или Tomcat?
Может ли проблема быть связана с более старыми версиями JavaMail или другими файлами JAR, вызывающими конфликты с протоколами SSL?
Кто-нибудь сталкивался с подобными проблемами при использовании JavaMail в качестве пароля восстановление в проекте JSP? Как вы решили проблему с подтверждением SSL?
Я был бы признателен за любые советы о том, как решить эту проблему, особенно относительно конфигурации SSL с JavaMail. Если речь идет о версиях JAR, каковы будут правильные версии и порядок этих библиотек?
Заранее спасибо за любую информацию!
Один день в учебном заведении, где я веду этот проект, отправка писем просто работала, мне не нужно было ничего менять, я просто пришел, включил компьютер и все заработало, я считал, что на этой машине установлена ​​Java-конфигурация, но на днях, когда я снова тестировал на том же компьютере, он снова выдал мне ошибку при отправке электронных писем.

Подробнее здесь: https://stackoverflow.com/questions/790 ... jsp-projec
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»