यहां PHP (और mysqli_real_connect
) क्लाइंट है सर्वर नहीं। आप इसे mysqli_ssl_set
. के साथ कॉन्फ़िगर कर रहे हैं क्लाइंट-प्रमाणपत्र प्रमाणीकरण के लिए (और सर्वर कुंजी और प्रमाणपत्र का उपयोग करके)।
मुझे यकीन नहीं है कि आपने अपने MySQL सर्वर को कैसे कॉन्फ़िगर किया है, लेकिन कॉन्फ़िगरेशन के (MySQL) सर्वर सेक्शन में कुछ ऐसा होना चाहिए:
ssl-key=/mysql-ssl-certs/server-key.pem
ssl-cert=/mysql-ssl-certs/server-cert.pem
ssl-ca=/mysql-ssl-certs/ca-cert.pem
ये वैसे भी क्लाइंट साइड से संबंधित नहीं हैं (केवल CA प्रमाणपत्र करता है, लेकिन निश्चित रूप से सर्वर की निजी कुंजी नहीं)।
एक बार ऐसा करने के बाद, आप यह देखने का प्रयास कर सकते हैं कि कमांड लाइन क्लाइंट का उपयोग करके सर्वर ठीक से कॉन्फ़िगर किया गया है या नहीं:
mysql --ssl-verify-server-cert --ssl-ca=/mysql-ssl-certs/ca-cert.pem --ssl -h hostname ...
या शायद यह (हालांकि सत्यापित करें कि सर्वर प्रमाणपत्र वास्तव में SSL/TLS के उपयोगी होने के लिए सक्षम होना चाहिए)
mysql --ssl-ca=/mysql-ssl-certs/ca-cert.pem --ssl -h hostname ...
यह कम से कम कमांड लाइन पर काम करना चाहिए।
फिर, PHP से, आपको दो विकल्प मिलते हैं:
mysqli_ssl_set
का उपयोग करें जैसा आपने किया है, लेकिन$key
. छोड़कर और$cert
शून्य, जब तक कि आप क्लाइंट-प्रमाणपत्र का उपयोग नहीं करना चाहते जो वास्तव में आपके सर्वर प्रमाणपत्र से अलग होना चाहिए। (मुझे याद नहीं है कि यह काम करता है या नहीं।)-
संभवतः आसान, छोड़ दें
mysqli_ssl_set
पूरी तरह से और इसे अपनी वैश्विक MySQL क्लाइंट कॉन्फ़िगरेशन फ़ाइल में कॉन्फ़िगर करें (जहां PHP इसे लेने में सक्षम होना चाहिए, संभवतः/etc/mysql/my.cnf
, लेकिन यह आपके वितरण के आधार पर भिन्न हो सकता है):[client] ssl-ca=/mysql-ssl-certs/ca-cert.pem
(यह सर्वर कॉन्फिग के समान है, लेकिन क्लाइंट साइड पर/क्लाइंट सेक्शन में।)
प्राधिकरण भाग के लिए (GRANT
):
REQUIRE SSL
केवल SSL/TLS के उपयोग की आवश्यकता हैREQUIRE ISSUER
,REQUIRE SUBJECT
औरREQUIRE X509
क्लाइंट को आवश्यक मानों की तुलना करने के लिए क्लाइंट-प्रमाण पत्र प्रस्तुत करने की आवश्यकता होती है (यही वह स्थिति है जहां आपकोssl-key
का उपयोग करने की आवश्यकता होगी औरssl-cert
क्लाइंट साइड पर (कॉन्फ़िगर याmysqli_ssl_set
. के भीतर) )।