Šifrované připojení k MySQL serveru s vlastnoručně podepsaným certifikátem

Feb|24 2012

On-line manuál MySQL nám celkem dobře vysvětlí, jaké argumenty použít pro šifrované připojení klienta k serveru. Pojďme se ale podívat na veškeré kroky, které musím jako "správce" serveru provést, tedy včetně generování klíčů a certifikátu, včetně elektronického podpisu.

V první řadě bych chtěl zdůraznit, že následující řádky by neměl brát do úvahy administrátor produkčního serveru. Ten by měl používat výhradně certifikáty podepsané důvěryhodnou certifikační autoritou. Následující způsob lze využít pro testování nebo v případě vzdálené komunikace se serverem, která z nějakého důvodu musí být šifrována.

Generování veřejného a soukromého klíče pro server

V prvním kroku vygenerujeme soukromý klíč pro server:

openssl genrsa -out server.key 1024

V případě potřeby veřejný klíč vygenerujeme ze soukromého následujícím příkazem, nicméně pro účely zabezpečení spojení ho nebudeme potřebovat.

rsa -in server.key -pubout > server.pub

Jak vytvořit a na co slouží Certificate Signing Request

Jedná se o zprávu, která obsahuje informace o majiteli budoucího certifikátu. Ten se odesílá certifikační autoritě, my ho ale použijeme pro vytvoření vlastnoručně podepsaného certifikátu.

openssl req -new -key server.key -out server.csr

Generování certifikátu

Certifikát by měl mít rozumnou délku platnosti, v produkci běžně rok, pro testování můžete zvolit jinou rozumnou dobu. Pro vygenerování samotné použijeme soubor vygenerovaný v minulém kroku a openssl utilita se nás zeptá na několik informací o majiteli certifikátu:

openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

Certifikát můžeme vytvořit i přímo z privátního klíče, bez generování souboru server.csr:

openssl req -new -x509 -key example.com.key -out example.com.cert -days 3650 -subj /CN=example.com

Nyní potřebujeme umístit certifikát do adresáře a to tak, aby byl čitelný uživatelem, pod kterým běží náš MySQL server, typicky uživatel mysql. Pozor si musíme dát i na SELinux kontext (pokud je aktivní), který může zabránit přečtení souborů démonem. Následující sekvenci příkazů můžete brát jako inspiraci:

# mkdir /usr/share/mysql/testcerts
# cp server.{crt,key} /usr/share/mysql/testcerts
# chown -R mysql:mysql /usr/share/mysql/testcerts
# restorecon -r /usr/share/mysql/testcerts

Vygenerovaný certifikát spolu se soukromým klíčem použijeme v konfiguračním souboru démona MySQL:

[mysqld]
ssl-ca=/usr/share/mysql/testcerts/server.crt
ssl-cert=/usr/share/mysql/testcerts/server.crt
ssl-key=/usr/share/mysql/testcerts/server.key

Rychlá a snadná cesta, jak vytvořit certifikát pro testování:

Jednoduchá stránka, jednoduché ovládání. Pouze uvedete doménu (můžete bez problému použít example.com) a aplikace vám vygeneruje dvojici soukromého klíče s vlastnoručně podepsaným certifikátem.

http://www.selfsignedcertificate.com

Zdroje:

http://dev.mysql.com/doc/refman/5.0/en/secure-using-ssl.html
http://www.akadia.com/services/ssh_test_certificate.html
http://www.chriscalender.com/?p=448

Tags: Internet | Programování | Databáze | Bezpečnost | Linux | Fedora

Add New Comment

Note: Comments will be visible after manual check by admin.

* These fields have to be filled.