TLS เรียกอีกอย่างว่า SSL (Secure Sockets Layer) หมายถึง Transport Layer Security
เมื่อมีการเชื่อมต่อที่ไม่ได้เข้ารหัสระหว่างไคลเอนต์ MySQL และเซิร์ฟเวอร์ บุคคลที่สามารถเข้าถึงเครือข่ายสามารถดูการรับส่งข้อมูลทั้งหมดและตรวจสอบข้อมูลที่ส่งหรือรับระหว่างไคลเอนต์และเซิร์ฟเวอร์ เมื่อผู้ใช้ต้องการย้ายข้อมูลผ่านเครือข่ายด้วยวิธีที่ปลอดภัย การเชื่อมต่อที่ไม่ได้เข้ารหัสจะไม่เป็นที่ยอมรับ
ในการทำให้ข้อมูลประเภทใดก็ตามที่ไม่สามารถอ่านได้ ต้องใช้การเข้ารหัส อัลกอริธึมการเข้ารหัสมักจะมีองค์ประกอบด้านความปลอดภัยที่ช่วยต่อต้านการโจมตีที่รู้จักหลายประเภท ซึ่งบางส่วนรวมถึงการเปลี่ยนลำดับของข้อความที่เข้ารหัสหรือการเล่นข้อมูลซ้ำสองครั้ง MySQL รองรับการเชื่อมต่อที่เข้ารหัสที่เกิดขึ้นระหว่างไคลเอนต์และเซิร์ฟเวอร์ที่พวกเขาทั้งคู่ใช้โปรโตคอล TLS แต่ MySQL ไม่ได้ใช้โปรโตคอล SSL สำหรับการเชื่อมต่อที่เข้ารหัสเนื่องจากการเข้ารหัสนั้นอ่อนแอ
TLS ใช้อัลกอริธึมการเข้ารหัสเพื่อให้แน่ใจว่าข้อมูลที่ได้รับผ่านเครือข่ายสาธารณะนั้นเป็นข้อมูลที่เชื่อถือได้ มีหลายวิธีในการตรวจจับการเปลี่ยนแปลงข้อมูล การสูญหาย หรือการเล่นซ้ำ นอกจากนี้ TLS ยังใช้อัลกอริทึมที่มาพร้อมกับการยืนยันตัวตนด้วยความช่วยเหลือจากมาตรฐาน X.509
ขั้นตอนในการเปิดใช้งาน TLS
MySQL ทำการเข้ารหัสต่อการเชื่อมต่อ การเข้ารหัสสำหรับผู้ใช้ที่กำหนดอาจเป็นตัวเลือกหรือบังคับก็ได้ ซึ่งจะทำให้ผู้ใช้สามารถเลือกการเชื่อมต่อที่เข้ารหัสหรือไม่เข้ารหัสได้ขึ้นอยู่กับความต้องการของแอปพลิเคชัน
ให้เราเข้าใจว่าสามารถเปิดใช้งาน TLS สำหรับไคลเอนต์ MySQL ได้อย่างไร:
- ต้องระบุพารามิเตอร์ ssl-cert และ ssl-key ในไฟล์การกำหนดค่าเมื่อเซิร์ฟเวอร์เริ่มทำงาน
- ใบรับรองหรือคีย์ได้รับการลงนามและสร้างโดยใช้ OpenSSL
- คีย์นี้ยังสามารถสร้างได้โดยใช้เครื่องมือ mysql_ssl_rsa_setup ใน MySQL:
mysql_ssl_rsa_setup --datadir=./certs
- หากพารามิเตอร์ถูกต้อง การเชื่อมต่อที่ปลอดภัยจะถูกส่งผ่านเป็นเอาต์พุตที่เปิดใช้งานเมื่อเริ่มต้น
- ใบรับรอง คีย์ และ CA ถูกโหลดใหม่- คำสั่ง ALTER INSTANCE RELOAD TLS ถูกดำเนินการบนอินสแตนซ์ของเซิร์ฟเวอร์ เพื่อให้แน่ใจว่าอินสแตนซ์ของเซิร์ฟเวอร์จะไม่ต้องโหลดซ้ำ
- ใบรับรองที่โหลดใหม่ คีย์ และ CA แสดงผลหลังจากดำเนินการเชื่อมต่อที่สร้างสำเร็จแล้ว
- ไคลเอนต์ MySQL ได้รับการกำหนดค่าให้ใช้การเชื่อมต่อที่เข้ารหัส - การเชื่อมต่อที่เข้ารหัสนั้นพยายามตั้งค่าโดยค่าเริ่มต้น หากเซิร์ฟเวอร์ไม่รองรับการเชื่อมต่อที่เข้ารหัส การเชื่อมต่อที่ไม่ได้เข้ารหัสจะถูกส่งคืนโดยอัตโนมัติ
- พฤติกรรมการเชื่อมต่อของไคลเอ็นต์สามารถเปลี่ยนแปลงได้โดยใช้ --ssl-mode Parameter:
--ssl-mode=REQUIRED- Tells that en encrypted connection is needed.
ต้องเปิดใช้งานการตรวจสอบความถูกต้อง:หากไม่ได้ระบุพารามิเตอร์ ssl-ca ไคลเอ็นต์หรือเซิร์ฟเวอร์จะไม่ตรวจสอบสิทธิ์ตามค่าเริ่มต้น
- ต้องระบุพารามิเตอร์ ssl-cert และ ssl-key ในเซิร์ฟเวอร์
- พารามิเตอร์ --ssl-ca ถูกระบุในไคลเอนต์ MySQL
- โหมด --ssl ถูกระบุเป็น VERIFY_CA ในไคลเอนต์ MySQL
- ใบรับรอง (ssl-cert) ที่กำหนดค่าในเซิร์ฟเวอร์ได้รับการลงนามโดย CA ที่ระบุโดยพารามิเตอร์ไคลเอ็นต์ --ssl-ca
- ถ้าไม่ใช่ การตรวจสอบสิทธิ์จะล้มเหลว
วิธีตรวจสอบสิทธิ์ไคลเอนต์ MySQL จากเซิร์ฟเวอร์:
- เซิร์ฟเวอร์ที่ระบุพารามิเตอร์ ssl-cert, ssl-key และ ssl-ca
- พารามิเตอร์ --ssl-cert และ --ssl-key ถูกระบุในไคลเอนต์
- ใบรับรองที่กำหนดค่าโดยเซิร์ฟเวอร์และใบรับรองที่กำหนดค่าโดยไคลเอ็นต์ได้รับการลงนามโดย ssl-ca ที่ระบุโดยเซิร์ฟเวอร์
- การตรวจสอบสิทธิ์เซิร์ฟเวอร์กับไคลเอ็นต์เป็นทางเลือก หากไคลเอ็นต์ไม่แสดงใบรับรองการระบุตัวตนในระหว่างการแฮนด์เชค TLS การเชื่อมต่อ TLS จะยังคงอยู่
- ตรวจสอบว่าการเชื่อมต่อปัจจุบันใช้การเข้ารหัสหรือไม่