Mysql
MySQL SSL 錯誤:無法獲取私鑰
嘗試啟用加密時出錯:
[ERROR] SSL error: Unable to get private key from '/etc/mysql/ssl/nginx.key' [Warning] Failed to set up SSL because of the following SSL library error: Unable to get private key
/etc/mysql/conf.d/encrypt.cnf:
[mysqld] ssl-ca=/etc/mysql/ssl/nginx.ca ssl-cert=/etc/mysql/ssl/nginx.crt ssl-key=/etc/mysql/ssl/nginx.key
密鑰是這樣生成的:
openssl req -newkey rsa:4096 -nodes -keyout nginx.key -subj "/C=US/ST=California/L=Sacramento/O=MyOrg/OU=MyDev/CN=MyApp"
openssl 檢查得很好。
我嘗試更改權限、所有者、文件名、移動到不同的目錄、禁用 SELinux(它已被禁用)、查看 AppArmor 日誌(它不會阻止它)、將“BEGIN/END PRIVATE KEY”更改為“BEGIN /END RSA 私鑰’。
它出什麼問題了?
好的,顯然只是將“BEGIN PRIVATE KEY”更改為“BEGIN RSA PRIVATE KEY”是不夠的。
它必須從 PKCS#8 正確轉換為 PKCS#1參考
openssl rsa -in /etc/mysql/ssl/nginx.key -out ~/nginx.key.rsa
作為我幫助他人的錯誤線索的整合:
- POSIX 模式位和文件所有者:mysql 使用者必須通過使用者或組權限對所有 SSL 文件具有讀取權限。這可能意味著
chown mysql *.pem
或將 ssl-private 添加到 mysql 的組中。(https://serverfault.com/questions/417390/cannot-setup-mysql-ssl-unable-to-read-certificate)- AppArmor 可以切斷文件訪問。你需要類似
/etc/mysql/**
in 的東西/etc/apparmor.d/usr.sbin/mysqld
。檢查/var/log/kern.log
並考慮aa-complain /usr/sbin/mysqld
得到錯誤而不是否認。(https://forums.mysql.com/read.php?26,393495,393636#msg-393636)- 格式錯誤的文件內容。SSL 庫在準確抱怨方面非常糟糕。確保完整的密鑰集可以在網站上執行。
- 該文件完全失去。同樣,在錯誤消息中沒有區別。