Teemme tietokantayhteyksistä turvallisempia
Kuten tiedät, SQL-tietokantojen käyttäjät saavat oletusarvoisesti luoda yhteyden vain paikallisesti, mikä varmistaa, että tiedot eivät siirry vieraiden verkkojen kautta. Myös Zonessa tiedot siirtyvät oletusarvoisesti tietokanta- ja web-palvelimen välisen intranetin kautta, joten ne eivät voi mitenkään ”karata”. Jos käyttäjä kuitenkin haluaa luoda yhteyden SQL-tietokantaan ulkopuolelta käsin, hänen kannattaa aktivoida TLS-protokolla, joka mahdollistaa suojatun yhteyden ja salaa kaiken asiakassovelluksen ja tietokantapalvelimen välisen tietoliikenteen.
Zonen asiakkailla on jo pitkään ollut mahdollisuus konfiguroida sovelluksensa käyttämään suojattua TLS-yhteyttä. Koska tietokannat sisältävät yleensä sellaista tietoa, jota ei saa vuotaa, mukaan lukien paljon arkaluonteisia henkilötietoja, näiden tietojen käsittelyn turvallisuuteen on kiinnitettävä erityistä huomiota. Siksi Zonessa voi nyt myös tehdä salatun yhteyden ehdon käyttäjille pakolliseksi. Jäljempänä kerromme siitä lisää.
Miksi tarvitsisin salatun SQL-yhteyden?
Turvallista TLS-yhteyttä tulee käyttää pääsääntöisesti ulkoisiin yhteyksiin, erityisesti tilanteissa, joissa sovellus sijaitsee Zonen järjestelmän ulkopuolella. Esimerkiksi silloin, kun SQL-palvelimeen on liitetty jokin ulkoinen palvelu, joka sijaitsee muun palveluntarjoajan pilvessä. Tällaisessa tilanteessa saattaa riittää, että sovelluksen ylläpitäjä tietää, että SSL-yhteys tulee konfiguroida ennakkoon. Tällaisten ulkoisten yhteyksien tapauksessa syntyy kuitenkin tilanteita, joissa kertakäyttöinen konfigurointi ei takaa turvallista yhteyttä.
Tällaisissa tapauksissa on oltava erityisen tarkkaavainen, varsinkin kun pääsy on myönnetty jollekin sellaiselle käyttäjälle, joka luo yhteyden tietokantaan ns. työpöytäsovelluksella. Esimerkiksi kehittäjien keskuudessa yleisellä Sequel Prolla tai hieman vähemmän tunnetulla Beekeeper Studiolla, jota käytettäessä tulee varmistaa etukäteen, että yhteys on salattu TLS-protokollalla. Mutta tietenkin voi syntyä tilanteita, joissa asia ei ole järjestelmäpäällikön hallinnassa. Juuri tämän poissulkemiseksi voimme nyt määrätä tietokannan käyttäjälle, että tietokantaan on pääsy vain TLS-yhteyksien kautta. Tätä varten on avattava tietokannan käyttäjähallinta ja asetettava siellä arvo ”Vaadi käyttäjältä TLS-yhteys”
Miksi se silti tarvitaan? Joskus ohjelmisto tekee työnsä niin, että sen täytyy kysyä kehittäjältä kysymyksiä tyyliin ”Tarkistaisitko, mitä tälle tilaukselle tietokannassa tapahtuu?”. Nykyään yleistynyttä etätyötä tehdessään kehittäjä voi katsoa tietokantaa jossain kahvilassa ja sen julkisessa wifissä. Jos tällaisessa tilanteessa ei käytetä TLS-yhteyttä, voidaan varmasti sanoa, että tilauksiin liittyvät henkilötiedot ovat pääsääntöisesti kulkeneet kolmansien osapuolten käsissä.
Ulkoisten yhteyksien tapauksessa on myös kiinnitettävä huomiota siihen, että yhteystiet rajoittuvat ehdottomasti vain sallittuihin IP-osoitteisiin. Myös tämä tulee konfiguroida My Zone -hallintaliittymässä konkreettisen tietokannan käyttäjän asetuksissa. On tärkeää muistaa, että salattua yhteyttä voi käyttää TLS-protokollan versiosta 1.2 alkaen. Osoitamme kuitenkin huomiota siihen, että tämä voi olla esteenä vanhemmille sovelluksille ja tietokanta-asiakasohjelmille. Sen takia ne kannattaa mahdollisuuksien mukaan ajanmukaistaa.
TLS:n käyttö asiakassovelluksessa
Desktop– eli työpöytä-asiakkaille tulee yhteyttä konfiguroitaessa laittaa asianmukainen rasti oikeaan ruutuun. Palvelinsovelluksen konfigurointia varten esitämme kuitenkin alempana muutamia esimerkkejä.
WordPress-sovelluksen tapauksessa riittää, kun wp-config.php-tiedostoon lisätään yksi rivi:
define( 'MYSQL_CLIENT_FLAGS', MYSQLI_CLIENT_SSL );
Code language: JavaScript (javascript)
PHP-komentosarjassa PDO-yhteyttä käytettäessä on määrättävä MYSQL_ATTR_SSL_CA arvo. Zonen palvelimella esimerkiksi:
try {
$db = new PDO(
'mysql:host=dXXX.mysql.zonevs.eu;dbname=$database;port=3306',
'{database_username}',
'{database_password}',
[
PDO::MYSQL_ATTR_SSL_CA => '/etc/ssl/zse/infernal/cacrt.d/MYSQL.ZONEVS.EU.crt'
]
);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Connected successfully";
} catch (PDOException $error) {
echo $error->getMessage();
}
Code language: PHP (php)
Huom.! TLS 1.2 on tuettu PHP:n versiosta 7.2 alkaen!
Luodaksesi yhteyden MariaDB:tä käyttävän palvelimen komentoriviltä sinun on käytettävä –ssl avainta
mysql -h dXXX.mysql.zonevs.eu -u {database_username} --ssl -p
Luodaksesi yhteyden MySQL 8.0 käyttävän palvelimen komentoriviltä sinun on käytettävä –ssl-mode= avainta
mysql -h dXXX.mysql.zonevs.eu -u {database_username} --ssl-mode=REQUIRED -p
Edellä mainituista avaimista on hyötyä silloin, kun haluaa käyttää mysqldump-toimintoa, esimerkiksi silloin, kun haluaa tehdä MySQL-varmuuskopioita Zonen verkon ulkopuolelle.
Miten tarkastaisin, onko yhteys salattu?
Käyttömenetelmästä riippumatta voit tarkastaa SSL-yhteyden toimivuuden SQL-lauseella:
SHOW STATUS LIKE 'Ssl_cipher';
Code language: JavaScript (javascript)
TLS-yhteyden tapauksessa Ssl_cipher arvona pitäisi olla esimerkiksi TLS_AES_256_GCM_SHA384. Jos tämä arvo on tyhjä, TLS-yhteyttä ei käytetä.