Görüldüğü gibi MySQL istemcisinden gerçekleştirilen SQL sorguları açık olarak görülmektedir. Aynı durum MySQL sunucusu ve istemcisi arasındaki trafiğin şifreli olarak iletildiğinde aşağıdaki gibi olmaktadır.
Yukarıda görüldüğü gibi MySQL sunucusu ve istemcisi arasındaki ağ trafiği şifreli bir biçimde gerçekleştirildiğinde, sorgular açık olarak görüntülenememektedir.
MySQL sunucu ve istemci trafiğinin şifrelenmesi için uygulanabilecek yöntemlerden bir taneside OpenSSL uygulamasının kullanılmasıdır. MySQL sunucu, istemci trafiğinin şifrelenmesi için kullanılabilecek açık kaynak kodlu yöntemlerden bazıları olarak OpenSSH , OpenVPN ve OpenSSL gösterilebilir. Burada OpenSSL kullanılarak nasıl sunucu istemci arasındaki trafiğin şifreleneceği anlatılacaktır. Öncelikle mevcut MySQL sunucu servisinde SSL desteğinin aktif olup olmadığına bakılmalıdır. Şekil 1'de görüldüğü gibi “SHOW VARIABLES LIKE 'have_openssl'” sql sorgusu ile görüntülenebilir.
# openssl genrsa -out ca-key.pem 2048
Generating RSA private key, 2048 bit long modulus ...........................................................................++++++ e is 65537 (0x10001)
# openssl req -new -x509 -nodes -days 1000 -key ca-key.pem -out ca-cert.pem
You are about to be asked to enter information that will be incorporated
into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [GB]:TR
State or Province Name (full name) [Berkshire]:Kastamonu
Locality Name (eg, city) [Newbury]:Merkez
Organization Name (eg, company) [My Company Ltd]:Agguvenligi
Organizational Unit Name (eg, section) []:Agguvenligi
Common Name (eg, your name or your server's hostname) []Agguvenligi
Email Address []: info@agguvenligi.net
Ardından sunucu için gerekli sertifikalar oluşturulmalıdır. Bunun için aşağıdaki adımların sırası ile takip edilmesi gerekmektedir.
# openssl req -newkey rsa:2048 -days 1000 -nodes -keyout server-key.pem -out server-req.pem
Generating a 2048 bit RSA private key
...............................................................................................................................+++
...................................................................+++ writing new private key to 'server-key.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [GB]:TR
State or Province Name (full name) [Berkshire]:Kastamonu
Locality Name (eg, city) [Newbury]:Merkez
Organization Name (eg, company) [My Company Ltd]:Agguvenligi
Organizational Unit Name (eg, section) []:Agguvenligi
Common Name (eg, your name or your server's hostname) []:Agguvenligi
Email Address []: info@agguvenligi.net
Please enter the following 'extra' attributes to be sent with your certificate request
A challenge password []:
An optional company name []:
# openssl x509 -req -in server-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem
Signature ok
subject=/C=TR/ST=Kastamonu/L=Merkez/O=Agguvenligi/OU=Agguvenligi/CN=Agguvenligi Guvenligi/emailAddress= info@agguvenligi.net
Getting CA Private Key
Son olaral MySQL istemcisi için gerekli sertifikalar oluşturulmalıdır. Bunun için aşağıdaki adımların sırası ile takip edilmesi gerekmektedir.
# openssl req -newkey rsa:2048 -days 1000 -nodes -keyout client-key.pem -out client-req.pem
Generating a 2048 bit RSA private key ..........+++.....................................................................+++ writing new private key to 'client-key.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [GB]:TR
State or Province Name (full name) [Berkshire]:Kastamonu
Locality Name (eg, city) [Newbury]:Merkez
Organization Name (eg, company) [My Company Ltd]:Agguvenligi
Organizational Unit Name (eg, section) []:Agguvenligi
Common Name (eg, your name or your server's hostname) []:Agguvenligi
Email Address []: info@agguvenligi.net
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
# openssl x509 -req -in client-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem
Signature ok
subject=/C=TR/ST=Kastamonu/L=Merkez/O=Agguvenligi/OU=Agguvenligi/CN=Agguvenligi/emailAddress= info@agguvenligi.net
Getting CA Private Key
Sertifikaların oluşturulmasının ardından kullanım için MySQL sunucu tarafında sertifikaların MySQL yapılandırma dosyası içerisinde gerekli belirtimlerinin gerçekleştirilmesi gerekmektedir. Bunun için yapılandırma dosyasında sunucu taraflı yapılandırma için[mysqld] bölümü içerisine aşağıda belirtilen satırların eklenmesi gerekmektedir.
[mysqld]
ssl-ca=/usr/local/MySQL-certs/cacert.pem
ssl-cert=/usr/local/MySQL-certs/server-cert.pem
ssl-key=/usr/local/MySQL-certs/server-key.pem
MySQL sunucu üzerinde sunucu taraflı gerekli yapılandırmanın gerçekleştirilmesinin ardından MySQL sunucu servisi yeninden başlatılmalıdır ardından MySQL sunucu servisi üzerinde SSL kullanımının aktif olduğu görülebilecektir.