tiistai 19. helmikuuta 2019

SSL-sertifikaatti omalle koneelle

Web-tekniikat kuten Push-notifikaatiot, paikannus ja Bluetooth vaativat salattua Https-yhteyttä. Tämä voi aiheuttaa ylimääräistä vaivaa kehitettäessä palveluita omalla tietokoneella, jolla ei useinkaan ole kiinteää IP-osoitetta tai pysyvää verkkotunnusta. Alla olevilla ohjeilla luot tarvittavat sertifikaatit omalle tietokoneellesi, jotta voit käyttää Https-yhteyttä kehityksessä!

1. Luo ensin juuriavain salasanalla
openssl genrsa -des3 -out rootCA.key 2048

2. Luo juurisertifikaatti (root certificate) äsken luodulla avaimella
openssl req -x509 -new -nodes -key rootCA.key -days 1024 -out rootCA.crt

3. Luo palvelimen avain (ilman salasanaa, jotta Apache käynnistyy automaattisesti)
openssl genrsa -out localhost.key 2048

4. Luo asetustiedosto san.cfg
vim san.cfg

5. Kopioi asetustiedostoon rivit:
default_bits = 2048
distinguished_name = dn
x509_extensions = san
req_extensions = san
extensions = san
[dn]
countryName = Country Name (2 letter code)
stateOrProvinceName = State or Province Name (full name)
localityName = Locality Name (eg, city)
organizationName = Organization Name (eg, company)
commonName = Common Name (e.g. server FQDN or YOUR name)
[san]
subjectAltName = @alt_names
[alt_names]
DNS.1 = localhost
DNS.2 = www.localhost

Muuta DNS.1 ja DNS.2 -rivit, jos haluat saada SSL-sertifikaatin aliverkkotunnukselle.

6. Luo varmennepyyntö palvelimelle (certificate request):
openssl req -new -key localhost.key -out localhost.csr -config san.cfg

7. Allekirjoita varmennepyyntö juuriavaimella ja -sertifikaatilla:
openssl x509 -req -in localhost.csr -CA rootCA.crt -CAkey rootCA.key \
-CAcreateserial -out localhost.crt -days 500 -extfile san.cfg

8. Muokkaa Apachen asetustiedostoa
sudo vim /etc/httpd/vhosts.d/000-default.conf

9. Lisää asetustiedostoon VirtualHost portille 443
<VirtualHost *:80>
    DocumentRoot "/home/teppo/public_html"
    ServerName localhost
</VirtualHost>

<VirtualHost *:443>
    DocumentRoot "/home/teppo/public_html"
    ServerName localhost
    SSLEngine on
    SSLCertificateFile /etc/ssl/certs/localhost.crt
    SSLCertificateKeyFile /etc/ssl/private/localhost.key

    # Enable forward secrecy
    SSLProtocol all -SSLv2 -SSLv3
    SSLHonorCipherOrder On
    SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4"
</VirtualHost>

missä /home/teppo/public_html on hakemisto, jonka alta nettisivut löytyvät.

10. Kopioi palvelimen avain ja sertifikaatti talteen Apachea varten
sudo cp localhost.key /etc/ssl/private/localhost.key
sudo cp localhost.crt /etc/ssl/certs/localhost.crt

11. Asenna juurisertifikaatti käyttöjärjestelmään (arch)
sudo trust anchor rootCA.crt

12. Käynnistä Apache uudelleen
sudo systemctl restart httpd

13. Avaa nettiselain (esim Chrome tai Firefox) ja kirjoita osoiteriville https://localhost

Jos kaikki meni oikein, niin näet osoitepalkissa lukon kuvakkeen merkiksi siitä, että selain on hyväksynyt sertifikaatit.




Lähteet:
  1. turlucode.com
  2. serverfault.com

Lisäys 23.11.2022: Jamie Nguyenin blogista löytyy laajempi selvitys sertifikaattien perustamisesta. Jamien ohjeilla saat käyttöön myös keskitason varmenteet, joiden avulla voit hallinnoida usean palvelimen verkkoa.