范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

MySQL8。0的PublicKeyRetrival错误,毫无规律可言怎么破?

  点击↑蓝字【DBAplus社群】并创建星标★
  持续收获更多独家原创干货!
  作者介绍
  农行研发中心"数风云"团队,一支朝气蓬勃、快速成长的技术团队,始终致力于农行大数据、数据库和云计算等领域的应用实践与技术创新,探索数据赋能,勇攀数据云巅,为企业数字化转型和金融科技发展不断贡献力量。
  一、背景介绍
  近期笔者所在部门在使用MySQL时,经常会出现如下错误,且这个错误并不会一直出现,属于某种偶发性的错误:
  笔者所在部门的连接数据库的方法有JDBC、JDBCTemplate、C3P0连接池和Druid连接池等技术,在这些连接实现方法上笔者都观察到出现过上述的错误。该错误有一定的特性,就是偶尔会出现该错误,该错误并不会一直出现,该错误的出现没有明显的规律。而且笔者发现,底层使用JDBC连接驱动的情况下,无论上层是采用何种数据源实现技术,笔者的部门都发现会报上述错误。
  针对上述错误,在笔者所在部门的软硬件环境下,笔者对MySQL为何会产生这个问题、这个问题产生的条件、MySQL官方文档对这个问题的阐述、如何有效避免与解决这个问题等方面在本文进行了详细的分析与解释。希望能够帮助到真正遇到这个问题的DBA与开发人员。
  二、环境介绍
  1、实验构架
  笔者所在部门使用的MySQL版本为8.0.18版本,MySQL使用组复制技术保证高可用,即MySQL Group Replication(MGR)。笔者复现问题以及实验的架构如下图所示:
  图2.1 实验所采用的构架
  本测试使用的MySQL MGR集群搭建在虚拟机之上,虚拟机的详细硬件配置如下表所示:
  表2.1 详细硬件配置
  为了充分测试各种类型的连接数据库的方式在笔者所在部门使用的MySQL上的表现,笔者分别测试JDBC、JDBCTemplate、C3P0以及Druid方式连接数据库,参与测试的软件版本如下表所示:
  表2.2 参与测试的软件版本
  三、问题报错展示
  在使用JDBC连接时,可能会出现"Public Key Retrieval is not allowed"的错误,从错误的Java堆栈信息中可以看出,该错误是在JDBC与MySQL建立Connection对象时出现的,该错误的错误堆栈如下图所示:
  图3.1 JDBC错误堆栈
  在使用C3P0连接池时,也会出现"Public Key Retrieval is not allowed"的错误,从错误的Java堆栈信息中可以看出,该错误仍是在JDBC与MySQL建立Connection对象时出现,该错误会导致C3P0连接池在初始化时失败,该错误的错误堆栈如下图所示:
  图3.2 C3P0错误堆栈
  在使用Druid连接池时,也会出现"Public Key Retrieval is not allowed"的错误,与C3P0连接池一样,会导致Druid连接池在初始化时失败,该错误的错误堆栈如下图所示:
  图3.3 Druid错误堆栈
  四、问题分析
  笔者在查阅了网上关于"Public Key Retrieval is not allowed"错误的资料后,发现大多数网上关于该问题的博文对该问题的解释都存在一定的纰漏。首先需要明确的是出现该问题的时候,MySQL配置的密码认证插件为如下两种:
  sha256_password
  caching_sha2_password
  值得注意的是,如果使用"mysql_native_password"密码认证插件,不会出现"Public Key Retrieval is not allowed"错误。MySQL配置的密码认证方式可以通过如下命令进行查看。
  接着笔者来详细分析"Public Key Retrieval is not allowed"错误产生的原因。首先MySQL 8.0默认推荐使用"sha256_password"和"caching_sha2_password"这两种认证插件。只有较老的MySQL版本仍然会使用"mysql_native_password"。
  根据MySQL提供的官方文档(https://dev.mysql.com/doc/refman/8.0/en/caching-sha2-pluggable-authentication.html),这两种插件都是使用SHA256算法来对密码进行保护。这些插件的具体执行流程如下:
  检查客户端是否禁用SSL/TLS加密传输;
  如果客户端未禁用SSL/TLS加密传输,则客户端在进行认证时的认证报文(传输用户名和密码的报文)是使用TLS进行传输的,两种插件认为认证报文传输安全,不进行任何其他操作;
  如果客户端禁用SSL/TLS加密传输,则客户端在进行认证时的认证报文(传输用户名和密码的报文)是使用明文进行传输的,两种插件认为认证报文传输不安全,会单独对明文报文中的密码使用RSA加密方式进行加密。
  1、启用SSL/TLS加密传输的客户端认证流程
  如上述流程所述,当客户端未禁用SSL/TLS加密传输时,通过Wireshark等抓包工具可以观察到整个客户端与MySQL服务端交互的过程都被TLS协议加密保护了。如下图所示:
  图4.1 启用TLS协议MySQL传输报文
  虽然会产生登录的明文报文,但是该明文报文中的用户信息为空,真正的用户信息在TLS握手阶段后的密文中。如下图所示:
  图4.2 启用TLS协议MySQL登录数据包详情
  2、禁用SSL/TLS加密传输的客户端认证流程
  如上述流程所述,当客户端禁用SSL/TLS加密传输时(比如JDBC连接串设置useSSL=false参数),用户的登录信息会在明文中进行传输,如下图所示:
  图4.3 禁用TLS协议MySQL传输报文
  明文传输密码存在安全问题,此时,两种插件会尝试使用RSA加密(RSA encryption)方法对明文报文中的密码部分进行加密,加密后的密码部分如下图所示:
  图4.4 启用TLS协议MySQL登录数据包详情
  五、解决方案
  根据前面的分析,导致"Public Key Retrieval is not allowed"主要是由于当禁用SSL/TLS协议传输后,客户端会使用服务器的公钥进行传输,默认情况下客户端不会主动去找服务器拿公钥,此时就会出现上述错误。
  经过查阅官方文档,出现Public Key Retrieval的场景可以概括为在禁用SSL/TLS协议传输切当前用户在服务器端没有登录缓存的情况下,客户端没有办法拿到服务器的公钥。具体的场景如下:
  新建数据库用户,首次登录;
  数据库的用户名、密码发生改变后登录;
  服务器端调用FLUSH PRIVELEGES指令刷新服务器缓存。
  针对上述错误,有如下的解决方案:
  在条件允许的情况下,不要禁用SSL/TLS协议,即不要在CLI客户端使用--ssl-mode=disabled,或在JDBC连接串中加入useSSL=false;
  如果必须禁用SSL/TLS协议,则可以尝试使用CLI客户端登录一次MySQL数据库制造登录缓存;
  如果必须禁用SSL/TLS协议,则可以通过增加如下参数允许客户端获得服务器的公钥:
  在JDBC连接串中加入allowPublicKeyRetrieval=true参数;
  在CLI客户端连接时加入--get-server-public-key参数;
  在CLI客户端连接时加入--server-public-key-path=file_name参数,指定存放在本地的公钥文件。

浙江省衢州市常山县新昌乡郭塘村致富大道上开满幸福之花近年来,浙江省衢州市常山县妇联积极发动妇女群众以农房整治后半篇文章为抓手,营造家庭美环境打造乡村微景观助力实现共富裕。今天我们就一起来看看新昌乡郭塘村致富路上的幸福之花。一米菜园美争创全国文明典范城,甘肃省金昌市妇联全员在行动为巩固提升全国文明城市创建水平,争创全国文明典范城市,8月21日,甘肃省金昌市妇联积极响应市创建全国文明城市工作指挥部的部署要求,组织全体干部职工在延安路(桂林路河雅路段)开展包街四川省雅安市名山区学党史聚爱心传温暖为进一步巩固拓展脱贫攻坚成果,接续推动脱贫地区发展和乡村全面振兴,2021年8月20日上午,由航空工业成都所十部中国电科10所四部中国电科10所二部中国电科29所西科微波通讯有限公精心培育苗家子孙热情服务各族村民在举国上下热烈庆祝中国共产党成立100周年的喜庆日子里,党中央为表彰全国各地各民族优秀党员,给他们颁发了光荣在党50年纪念章,他们从事各行各业,在平凡的岗位上作出了不平凡贡献。能够浙江省杭州市萧山区妇联弹好我为儿童办实事四重奏奏响儿童缤纷暑期欢乐颂浙江省杭州市萧山区妇联按照学党史悟思想办实事开新局要求,利用儿童之家城市书房家长学校云上课堂等载体,通过不断创新内容和形式,联合部门社会及爱心单位力量,把安全作为主旋律,以快乐充实生态优先绿色低碳创建绿色家庭在行动为弘扬绿色发展理念,倡导绿色价值观念,引导广大家庭践行简约适度绿色低碳的生活方式,河北省唐山市曹妃甸区妇联深入开展绿色家庭创建活动,营造了节能降碳绿色发展的良好社会氛围。注重宣传引用心讲好党史这本教科书陈艳湖南党史陈列馆副馆长,中共党员,全国三八红旗手,全国第五批岗位学雷锋标兵自古无湘不成军,湖南党史陈列馆副馆长陈艳,坚守讲解一线20年,长期沉浸在壮阔的党史中,感受炽热的伟人光辉浙江省衢州市法律娘家人公益普法课堂开讲啦浙江省衢州市各级妇联坚持以习近平法治思想为指导,以群众需求为导向,以家庭建设月为契机,紧紧围绕民法典未成年人保护法等与妇女和家庭密切相关的法律法规,邀请律师法官和民警走进文化礼堂儿何应花坝老山上的勤务员何应花,女,汉族,1975年8月生,云南澜沧人,2005年6月参加工作,2006年6月加入中国共产党,现任云南省普洱市上允镇坝老村党总支副书记。自参加工作以来,她努力践行着自己的入治水走山村,绿水绕人家从成功打造首个村镇安全饮水示范工程起,雷晓玲率团队已为重庆山区数万居民解决了安全饮水问题。她希望未来可以打开龙头就能喝,这一天正在一步步走来。雷晓玲重庆市科学技术研究院低碳与生态环万户进课堂,十年暖民心为提升全县农村妇女技术技能水平,河北省唐山市玉田县妇联充分发挥该县河北省高素质农民培育基地作用,积极组织39名女教师女专家下乡入企,在全县13个乡镇和近20家企业开设基层教学基地开
顺产一定要侧切吗?资深产科医生告诉你答案对临产的准妈妈来说阵痛侧切就像两个紧箍咒不敢想,又挥之不去侧切到底是种什么体验难道真的选择了顺产就等于选择了侧切吗?遂宁妇产医院产前门诊谢会英主任告诉你答案!什么是侧切?侧切即会阴孕期进补不能盲目这些坑别跳孕妇都习惯性进食大量的滋补品,以为吃得多宝宝才能吸收到足够的营养。因此,刚怀上就开始大肆吃营养物质高的食物,而且每天进食的量是需求量的1倍及以上。其实这样子进补对健康并不利,盲目进南怀瑾先生善于安排自己,过一个快乐的人生杨朱曰原宪窭于鲁,子贡殖于卫。原宪之窭损生,子贡之殖累身。然则窭亦不可,殖亦不可,其可焉在?曰可在乐生,可在逸身。故善乐生者不窭,善逸身者不殖。这里杨朱就提到这个事,原宪窭于鲁,孔真正的幸福就是住在自己的小院里,拾花弄草煮茶品人生你是否想年老后有一方小院,养花种菜品茶谈人生春气发而百草生,正得秋而万宝成。夫春与秋,岂无得而然哉?天道已行矣。庄子庚桑楚现在的我们,生活在城市里。总是在为了生活而不停地奔波。在我手诊分析手指肚和健康状态有什么关系?大家看一下这个手掌,突然看上去是不是觉得挺好,没有太大问题?没有多么杂乱的纹路,手掌颜色也不是那么红,而且比较均匀。如果我们看到细节,就知道还是有问题的。这个手掌是一位38岁的女性文章首次收入5。07元写了二个月的文章了,从开始十天的0。00元,到后来的一篇文章收入5。07元,我还是很有成就感的捂脸捂脸捂脸捂脸捂脸看了一下收入高文章,最终能有五元收入还是转发量比较高,阅读量有24首次文章收益破10元昨天还在日收益在五元,今天文章收益破10元,捂脸捂脸捂脸捂脸金币领领一天24000,日入0。8元。可稳当了。笑哭笑哭笑哭笑哭这是不是叫东边不亮,西边亮,朋友们再来帮我鼓鼓劲,看来以50000展现的文章收入了7。19元昨天写了一篇文章与孩子聊了聊,你喜欢什么样的家长,本来想7000阅读量有4块不错了,没想到收益了7。19元。看来很多家长还是喜欢看看孩子喜欢什么样的家长的,看看自己有没有什么行为是大家帮忙看看这文章收入有5元没?大家帮忙看看哈,这篇文章收益可以有5元吗?评论量有点少,分享量还可以捂脸捂脸捂脸捂脸捂脸捂脸捂脸,大家要不要再帮我去点击一下上面一篇文章给我增加点评论量啊。心心心心心心新手朋友总是这几天文章收益过4元,看我怎么做到的?这三天发布三篇文章,收益都有4元以上,大家来看看详细数据,每1000阅读量能有1元也还可以。大家看看这几篇文章的展现量和阅读量。本来三万展现能有3000阅读量就不错,但是这几篇文章看我怎么每日收益3元的?我今天生日呀,朋友们,能给我一个小蛋糕吗?头条极速版写文章也一个月了,收获了70元了,友友们一支以来的支持,给了我很大的动力。我会继续写一些文章,让大家能够在孩子的学习上,或者说在