主從復制報錯2061:Authentication plugin 'caching_sha2_password' reported error:Authentication require secure connection


主從復制報錯2061:Authentication plugin 'caching_sha2_password' reported error:Authentication require secure connection

(轉) https://www.modb.pro/db/29919

主從復制報錯2061:

出現故障

在MySQL8.0中,創建主從復制使用的用戶:

mysql> CREATE USER 'repl'@'%' identified by 'XXXXXX' 
mysql> GRANT REPLICATION SLAVE ON *.* TO `repl`@`%` 

在從庫配置好change master 信息后,start slave,查看復制狀態,如下所示:

Last_IO_Errno:2061
Last_IO_Error:error connecting to mater 'repl@118.31.127.96:3307' - retry-time:60 retries:1 massage:Authentication plugin 'caching_sha2_password' reported error:Authentication require secure connection. 

caching_sha2_password

    在MySQL8.0之前,身份驗證的插件是mysql_native_password,在MySQL 8.0中,caching_sha2_password 是默認的身份驗證插件,安全性更高。
 
    在MySQL中,系統狀態變量Rsa_public_key,此值是sha256_password身份驗證插件用於基於RSA密鑰對的密碼交換的公用密鑰 。對於使用該sha256_password 插件的客戶端,連接到服務器時,密碼永遠不會以明文形式公開。密碼傳輸的方式取決於是否使用安全連接或RSA加密:

1.如果連接安全,則無需使用RSA密鑰對。這適用於使用TLS加密的連接。密碼以明文形式發送,但由於連接安全,因此無法監聽。
2.如果連接不安全,並且RSA密鑰對可用,則該連接將保持未加密狀態。這適用於未使用TLS加密的連接。RSA僅用於客戶端和服務器之間的密碼交換,以防止密碼監聽。服務器收到加密的密碼后,便對其進行解密。加密中使用加擾來防止重復攻擊。
3.如果未使用安全連接且RSA加密不可用,則連接嘗試將失敗,因為無法發送密碼而不將密碼公開為明文。
由該 —server-public-key-path選項命名的文件中的公共密鑰值 應與由 caching_sha2_password_public_key_path系統變量命名的服務器端文件中的密鑰值相同 。如果密鑰文件包含有效的公共密鑰值,但該值不正確,則會發生拒絕訪問的錯誤。如果密鑰文件不包含有效的公共密鑰,則客戶端程序無法使用它。

故障原因

通過上面對插件caching_sha2_password的介紹,這次故障的原因可以猜測為:在從庫連接主庫的時候使用的是不被 caching_sha2_password認可的RSA公鑰,所以主庫MySQL拒絕了數據庫連接的請求,從而,從庫報錯’caching_sha2_password’ reported error:Authentication require secure connection。

根據上一張密碼傳輸方式的第3條,該插件發現連接未加密,因此需要使用RSA加密來傳輸密碼。但是,服務器不會將公用密鑰發送給客戶端,並且客戶端未提供公用密鑰,因此它無法加密密碼並且連接失敗:ERROR 2061 (HY000): Authentication plugin ‘caching_sha2_password’ reported error: Authentication requires secure connection.

官網給出的解決方案如下:

要從服務器請求RSA公鑰,需要指定選項 --get-server-public-key 。
截屏20200831 下午5.43.59.pngimg
從服務器請求基於RSA密鑰對的密碼交換所需的公共密鑰。此選項適用於使用caching_sha2_password身份驗證插件進行身份驗證的客戶端 。對於該插件,除非請求,否則服務器不會發送公鑰。對於未使用該插件進行身份驗證的帳戶,將忽略此選項。如果未使用基於RSA的密碼交換,也將被忽略,例如客戶端使用安全連接連接到服務器時。

或者,如果客戶端的文件包含服務器所需的RSA公鑰的本地副本,則可以使用—server-public-key-path選項指定文件 。
截屏20200831 下午6.02.39.pngimg
PEM格式的文 件的路徑名,其中包含服務器用於基於RSA密鑰對的密碼交換所需的公用密鑰的客戶端副本。此選項適用於使用sha256_password或 caching_sha2_password身份驗證插件進行身份驗證的客戶端 。

解決方案一:

使用復制用戶請求服務器公鑰:
mysql -u repl -p123 -h 118.31.127.96 -P3307 --get-server-public-key
在這種情況下,服務器將RSA公鑰發送給客戶端,后者使用它來加密密碼並將結果返回給服務器。插件使用服務器端的RSA私鑰解密密碼,並根據密碼是否正確來接受或拒絕連接。

重新在從庫配置change masrer to並且start slave,復制可以正常啟動:

#停止主從復制
#清空之前的主從復制配置信息
stop slave;
reset slave;

#從新配置主從復制
change master to master_user='repl',master_password='123',master_host='118.31.127.96',master_port=3307,master_auto_position=1;
start slave;

截屏20200831 下午5.45.24.pngimg

解決方案二:

使用復制用戶請求服務器公鑰:
mysql -u repl -p123 -h 118.31.127.96 -P3307 --server-public-key-path=/mysqldata/my3308/data/public_key1.pem

重新在從庫配置change masrer to並且start slave,復制可以正常啟動:

#停止主從復制
#清空之前的主從復制配置信息
stop slave;
reset slave;

#從新配置主從復制
change master to master_user='repl',master_password='123',master_host='118.31.127.96',master_port=3307,master_auto_position=1;
start slave;

解決方案三:

根據社區提供的方案,修改復制賬戶,避免使用插件caching_sha2_password
MySQL MySQL8.0主從同步報錯2061問題解決_Cindy的博客-CSDN博客
方法如下:
1.修改repl用戶,使其使用別的秘密加密方式,不使用插件caching_sha2_password。
2.

CREATE USER 'repl'@'%' IDENTIFIED WITH 'mysql_native_password' BY 'XXXX'; 
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; 

#檢查復制賬戶
select user,host,plugin,authentication_string from user \G
*************************** 4. row ***************************
                 user: repl
                 host: %
               plugin: mysql_native_password
authentication_string: *B2A7A5489FB0EE54E43E3ADCDDVDG5CCF255AF0

#重新配置主從配置

總結

出現ERROR 2061 (HY000): Authentication plugin ‘caching_sha2_password’ reported error: Authentication requires secure connection.是因為復制賬戶repl沒有加密連接到主庫,所以主庫拒絕了在傳輸過程中,明文顯示密碼的連接。

解決方法有三種,如上。個人認為解決方法一和解決辦法二 比 解決方法三 更有效,無需修改任何用戶信息,僅需要通過 --get-server-public-key和–server-public-key-path請求公鑰即可。
解決方法三完全避免了使用MySQL8.0的密碼插件caching_sha2_password。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM