记一次部署在docker环境项目发送邮件出现No appropriate protocol

news2024/11/26 21:24:04

前言

部门有个项目涉及到邮件发送,发送功能在本地测试可以成功发送,但是打包部署到docker环境中,却出现

No appropriate protocol (protocol is disabled or cipher suites are inappropriate)

后面在网上搜索了一下,查到了这篇文章

https://stackoverflow.com/questions/67742776/docker-container-error-javax-mail-messagingexception-no-appropriate-protocol

这篇文章有个答主提到,他使用的版本的jdk 8u292,这个版本已经禁用了不安全的TLSv1&TLSv1.1,于是我就查了一下我们部署的docker基础镜像jdk版本,为jdk8u332。后面再搜索了一下解决方案,大部分的解决方案都是通过修改java.security文件中的jdk.tls.disabledAlgorithms配置,删除掉TLSv1&TLSv1.1来解决

但是这种方案给我的感觉,有那么点欠妥。毕竟jdk禁用TLSv1&TLSv1.1应该是经过考量的。所以一开始我就先把这个方案作为其他方案都无法解决的时候,最终兜底方案。下面就来回顾 一下,我的解决历程

解决历程

方案一:将mail.smtp.ssl.protocols配置为TLSv1.2

但改完后,报了如下异常

The server selected protocol version TLS10 is not accepted by client preferences [TLS12]

因为server端支持的TLSv1.0,因此没招,mail.smtp.ssl.protocols就不能改为TLSv1.2

方案二:将javax.mail的包换成com.sun.mail

        <dependency>
            <groupId>com.sun.mail</groupId>
            <artifactId>javax.mail</artifactId>
            <version>1.6.2</version>
        </dependency>

该方案是来源如下博文
https://blog.csdn.net/qq_33601179/article/details/123069499
他通过调整mail的gav解决,但我经过实验,发现该方案并没解决我的问题,仍然会报

No appropriate protocol (protocol is disabled or cipher suites are inappropriate)

方案三:进入docker容器内部,修改java.security文件中的jdk.tls.disabledAlgorithms配置,删除掉TLSv1&TLSv1.1

网上查了资料,大多数都是通过宿主机去修改java.security,通过docker去修改,基本上没看到。

不过我们可以通过进入容器docker内部,进行修改。但要修改java.security,首先就得知道java.security文件的位置。不同的基础镜像,java.security文件的位置可能是不一样的。

那如何知道java.security的具体位置呢? 这边提供一个思路,如果是自制的基础镜像,可以去问公司自制这个镜像的作者,如果是公有的镜像,可以通过docker hub,比如我们这个项目的镜像是用到skywalking-java-agent:8.11.0-java8,因此我们就可以去docker hub,搜索该镜像,然后点开详情,里面有的会有IMAGE LAYERS

由这个就可以知道java的基本路径,然后进入容器内部


我们就可以通过vim命令去修改java.security文件内容,不过正常修改的时候,要装下vim

apt-get update
apt-get install vim

修改完重启一下容器,然后通过访问 ip:端口/actuator/health,前提要引入actuator

   <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

并配置

 endpoint:
      health:
        show-details: always

查看mail的健康状态

或者可以直接发送测试邮件,验证也可以

方案四:调整Dockerfile

其实方案四的实现逻辑和方案三是一样的,核心也是修改java.security文件中的jdk.tls.disabledAlgorithms配置,删除掉TLSv1&TLSv1.1。但方案三有个弊端是,每次发版后,都要重新进入docker容器内部修改。方案四的方案是
在Dcokerfile文件里面添加如下内容

RUN sed -i 's/jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1/jdk.tls.disabledAlgorithms=SSLv3/g' /opt/java/openjdk/lib/security/java.security

本质就是在构建业务镜像时,同时修改java.security内容,最终达到和方案三一样的效果

方案五:降低jdk版本

这种方案虽然也可以达到效果,但是不建议就是,毕竟换了jdk,可能会导致其他不可预知的问题

总结

这几种方案,因为1,2方案达不到目的,所以只能在3,4,5这三种方案选,基本上大多数都会选择方案四。不过虽然是解决问题,但是始终感觉不是最佳方案,最佳方案可能是不改jdk内容,通过其他方式改,但暂时又没其他思路,如果有更好的方案,大家可以留言告知

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/153685.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

技术分享 | 测试平台开发-前端开发之Vue.js 框架的使用

首先将 Vue.js 下载到本地&#xff0c;本章就以本地的 Vue.js 为例。在本地创建一个工作区即创建一个文件夹&#xff0c;使用 vscode 打开&#xff0c;将 Vue.js 放到工作区目录下。 创建挂载元素 首先创建一个 index.html 的文件&#xff0c;使用 加载 vue.js&#xff0c;这…

NAT模式虚拟机能ping通宿主机但是telnet不通 教你如何设置网关走出误区

今天跟大家聊聊如何正确配置NAT模式下虚拟机的网关。 如标题所言&#xff0c;我一开始在设置网关的时候一直存在着误区&#xff0c;而这个误区也导致标题中的问题&#xff1a;虚拟机能ping通宿主机&#xff0c;但是telnet不通&#xff0c;这就很奇葩了。 如下网络拓扑图。 虚…

Linux ALSA 之五:ALSA Proc Info

ALSA Proc Info一、概述二、Proc Files of Alsa Driver1、/proc/asound/xxx 简述2、创建 /proc/asound 目录树2.1 /proc/asound/version 文件2.2 /proc/asound/devices 文件2.3 /proc/asound/cards 文件2.4 /proc/asound/cardx 目录2.5 /proc/asound/pcm 文件一、概述 Linux系…

企业不可忽视的舆情监测管理办法,TOOM舆情监控工作总结?

企业做好舆情监控以及舆情管理是对企业负责&#xff0c;在企业发展过程中不可能是一帆风顺的&#xff0c;少不了各种各样的流言蜚语&#xff0c;像舆情监控管理监测早知早解决。接下来我们简单了解企业不可忽视的舆情监测管理办法&#xff0c;TOOM舆情监控工作总结? 一、企业…

【NI Multisim 14.0原理图设计基础——调整元器件位置】

目录 序言 一、调整元器件位置 &#x1f34a;1.元器件的移动 &#x1f34a;2.元器件的旋转 &#x1f34a;3.元器件的对齐 序言 NI Multisim最突出的特点之一就是用户界面友好。它可以使电路设计者方便、快捷地使用虚拟元器件和仪器、仪表进行电路设计和仿真。 首先启动NI…

【自学Python】Python print()函数

Python print()函数 Python print()函数教程 在 Python 中&#xff0c;print() 函数用于打印相应的信息到终端控制台&#xff0c;同时 print() 函数可以支持同时输出一个或多个 变量。 Python print()函数详解 语法 print(*objects, sep , end\n, filesys.stdout, flushFa…

线性代数 --- 投影Projection 六(向量在子空间上的投影)

向量b在多维子空间上的投影回顾&#xff1a;向量在向量上&#xff08;直线上&#xff09;的投影在研究向量在子空间上的投影前&#xff0c;先回顾一下前面学习的一个任意向量b在另一个向量a上的投影&#xff0c;共三个部分。1&#xff0c;求权重系数&#xff08;A constant&…

2022 general purpose in-context learning by meta-learning transformers

wps: option left 回到上一个视图 Kirsch L, Harrison J, Sohl-Dickstein J, et al. General-purpose in-context learning by meta-learning transformers[J]. arXiv preprint arXiv:2212.04458, 2022. 目录Kirsch L, Harrison J, Sohl-Dickstein J, et al. General-purpose…

【高校节能】高校电力能源智能管理系统设计目标与原则

摘 要&#xff1a;高校构建电力能源智能管理系统&#xff0c;可以实现对高校电力能源消耗的实时监测、分析预警和辅助决策。系统通过能效管理技术监测各个设备的用电情况&#xff0c;并通过数据的取得、整合、汇总来实现能源的绩效管理。系统从全局出发&#xff0c;整体调控电…

CCF BDCI | 算能赛题决赛选手说明论文-03

基于TPU平台实现人群密度估计∗ ChaMd5-AI 唐晶机械工程&博士二年级 华中科技大学 中国-武汉 j_tanghust.edu.cn 团队简介 唐晶&#xff0c;2001年生&#xff0c;本科毕业于华中科技大学机械卓越工程师班&#xff0c;现为华中科技大学机械科学与工程学院陶波教授课题组博…

视频实时自然美颜, 无惧素颜上镜

华为HMS Core 视频编辑服务依托自身AI技术的核心优势&#xff0c;在最新版本HMS Core 6.8.0中上线了全新的视频美颜功能&#xff0c;能对指定图片或视频中的人脸实现磨皮、美白、大眼、瘦脸的美颜效果&#xff0c;适用于直播、相机、视频剪辑、图片处理等场景中&#xff0c;打造…

cubeIDE开发, stm32的GPIO原理、cubeMX配置及底层源码实现分析

一、GPIO介绍 1.1 GPIO 简述 GPIO(General purpose input/output&#xff0c;通用型输入输出)&#xff0c;一个引脚可以用于输入、输出或其他特殊功能&#xff0c;PIN脚依现实需要可作为通用输入&#xff08;GPI&#xff09;或通用输出&#xff08;GPO&#xff09;或通用输入与…

鑫磊股份开启申购:资产负债率较高,实控人控制企业借款高企

1月10日&#xff0c;鑫磊压缩机股份有限公司&#xff08;下称“鑫磊股份”&#xff0c;SZ:301317&#xff09;开启申购&#xff0c;发行价格20.67元/股&#xff0c;市盈率58.65倍。据贝多财经了解&#xff0c;鑫磊股份将在深圳证券交易所创业板上市。 本次上市&#xff0c;鑫磊…

LinuxC—进程

进程 1 进程标识符pid 基本概念 类型pid_t&#xff0c;是一个有符号16位整数&#xff0c;进程号是顺次向下使用(fd是优先使用当前可用最小的) shell中的ps命令能够查看当前系统的进程信息快照 相关函数 getpid(2)获取当前进程的进程号 /* Get the process ID of the calling…

中断处理程序

文章目录前言前置知识中断概念中断分类实验操作实验一实验二实验三前言 博客记录《操作系统真象还原》第七章实验的操作~ 实验环境&#xff1a;ubuntu18.04VMware &#xff0c; Bochs下载安装 实验内容&#xff1a; 编写中断处理程序&#xff08; 操作 8259A 打开中断&…

2023年浙江食品安全管理员考试真题题库及答案

百分百题库提供食品安全管理员考试试题、食品安全管理员考试预测题、食品安全管理员考试真题、食品安全管理员证考试题库等&#xff0c;提供在线做题刷题&#xff0c;在线模拟考试&#xff0c;助你考试轻松过关。 一、多选题 1.餐具清洗消毒水池与以下哪些水池应分开&#xff…

机器学习— —导入数据

DAY1集成开发环境原始数据展示主要函数介绍data.iloc()函数dataset.iloc[0]dataset.iloc[:,:-1]dataset.iloc[:,3]dataset.iloc[1:3,1]可执行代码导入结果展示我的写在最后集成开发环境 Spyder (前身是 Pydee) 是一个强大的交互式 Python 语言开发环境&#xff0c;提供高级的代…

如何搭建Python环境和安装Pycharm

1、 搭建Python的基础环境 Anaconda简介 Anaconda指的是一个开源的Python发行版本&#xff0c;其包含了conda、Python等180多个科学包及其依赖项。 因为包含了大量的科学包&#xff0c;Anaconda 的下载文件比较大&#xff08;约 531 MB&#xff09;&#xff0c;如果只需要某些…

【Kotlin】标准库函数 ② ( run 标准库函数 | run 函数传入 Lambda 表达式作为参数 | run 函数传入函数引用作为参数 )

文章目录一、run 标准库函数1、run 函数传入 Lambda 表达式作为参数2、run 函数传入函数引用作为参数Kotlin 语言中 , 在 Standard.kt 源码中 , 为所有类型定义了一批标准库函数 , 所有的 Kotlin 类型都可以调用这些函数 ; 一、run 标准库函数 1、run 函数传入 Lambda 表达式作…

Odoo丨5步轻松实现在Odoo中打开企微会话框

文章目录一、前言二、实现方案三、接口调用步骤一、前言 企业微信作为一个很好的企业级应用发布平台&#xff0c;尤其是提供的数据和接口&#xff0c;极大地为很多企业级应用提供便利&#xff0c;在日常中应用广泛&#xff01; 最近在项目中就遇到一个与企业微信相关的场景开…