जैसा कि @skelwa ने पहले ही टिप्पणी कर दी है, आपको enabledTLSProtocols=TLSv1.2
जोड़ना होगा आपकी समस्या का समाधान करने के लिए कनेक्शन स्ट्रिंग में कॉन्फ़िगरेशन गुण।
Connector/J के लिए एक पूर्ण कनेक्शन स्ट्रिंग इस तरह दिख सकता है:
jdbc:mysql://<host>:<port>/<dbname>?enabledTLSProtocols=TLSv1.2
r2dbc
के लिए आपको tlsVersion=TLSv1.2
. का उपयोग करना होगा इसके बजाय।
जो प्रश्न शेष है वह है:
JDK और MySQL केवल TLSv1.2
का उपयोग करने के लिए सहमत क्यों नहीं हैं? ?
यद्यपि दोनों पक्ष वास्तव में TLSv1.2 का समर्थन करते हैं, आप जिस समस्या का सामना कर रहे थे, वह कनेक्टर/जे के डिफ़ॉल्ट व्यवहार द्वारा प्रस्तुत की गई है। संगतता कारणों से Connector/J डिफ़ॉल्ट रूप से TLSv1.2 और उच्चतर को सक्षम नहीं करता है। इसलिए, किसी को इसे स्पष्ट रूप से सक्षम करना होगा।
निम्नलिखित देखें नोटए> :
चेतावनी: कृपया ध्यान रखें कि <स्ट्राइक>समाधानस्ट्राइक> संपादन का सुझाव देना jdk.tls.disabledAlgorithms
jre/lib/security
. के अंदर एक सुरक्षा जोखिम . उत्पन्न करें आपके आवेदन में और कुछ भी बदलने के गंभीर निहितार्थ हो सकते हैं! ऐसे कारण हैं कि उन प्रोटोकॉल को अक्षम कर दिया गया था और किसी को बस सब कुछ या उस सूची से केवल कुछ हिस्सों को नहीं निकालना चाहिए।
नोट: यदि आप अपनी समस्या को डीबग करने के लिए JDK से अधिक निम्न स्तर की अंतर्दृष्टि प्राप्त करना चाहते हैं, तो आप निम्न कॉन्फ़िगरेशन को java comand में पास करके ssl डीबग लॉग को सक्षम कर सकते हैं:
-Djavax.net.debug=ssl,handshake
या यहां तक कि-Djavax.net.debug=all
आपके मामले में आप कुछ इस तरह देखेंगे:
...(HANDSHAKE_FAILURE): Couldn't kickstart handshaking (
"throwable" : {
javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
at java.base/sun.security.ssl.HandshakeContext.<init>(HandshakeContext.java:170)
at java.base/sun.security.ssl.ClientHandshakeContext.<init>(ClientHandshakeContext.java:98)
...