Ero sivun ”Apache ja HTTPS” versioiden välillä

Linux.fista
Siirry navigaatioon Siirry hakuun
p (Ironista.)
 
(29 välissä olevaa versiota 12 käyttäjän tekeminä ei näytetä)
Rivi 1: Rivi 1:
Otetaan käyttöön SSL-salaus käyttöön Apachen kanssa. Oletaan, että Apache2 on asennettuan järjestelmään. Ohje testattu Ubuntun kanssa.
[[HTTPS]]-protokolla mahdollistaa verkkoliikenteen salaamisen [[wikipedia:fi:SSL|SSL]]-yhteyskäytännöllä. Tässä oppaassa otetaan käyttöön [[Apache]]n HTTPS-tuki.  


====Sertifikaatti====
==Varmenne==
Aloitetaan luomalla sertifikaatti joka on voimassa halutun ajan.
SSL-salausta käytettäessä tarvitaan varmenne (sertifikaatti). Varmenteen avulla käyttäjä voi paremmin selvittää, minkä palvelimen kanssa verkossa todellisuudessa asioi.
sudo apache2-ssl-certificate -days 365
Vastaile tuleviin kysymyksiin.


====Aktivoidaan SSL-moduuli====
Aloitetaan luomalla varmenne, joka on voimassa halutun ajan. Vanhemmissa järjestelmissä tämä onnistuu komennolla
sudo a2enmod ssl
apache2-ssl-certificate -days 365
Uudemmissa järjestelmissä komentoa <tt>apache2-ssl-certificate</tt> tai siihen liittyvää asetustiedostoa ei löydy. Ainakin Ubuntu 12.04 voi siinä tapauksessa käyttää komentoa:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt
ja vastaamalla kysymyksiin.
<!-- * Harkinnassa voisi olla read-only slaven tekeminen varsinaisesta koneesta.
-- Mitä tämä tarkoittaa? -->
Muuten on parasta luoda varmennetiedosto itse seuraavalla [[Bash-skriptaus|skriptillä]]:
<source lang="bash">
  #!/bin/sh -e
  if [ "$1" != "--force" -a -f /etc/apache2/ssl/apache.pem ]; then
    echo "/etc/apache2/ssl/apache.pem exists!  Use \"$0 --force.\""
    exit 0
  fi
  if [ "$1" = "--force" ]; then
    shift
  fi   
  echo
  echo creating selfsigned certificate
  echo "replace it with one signed by a certification authority (CA)"
  echo
  echo enter your ServerName at the Common Name prompt
  echo
  echo If you want your certificate to expire after x days call this programm
  echo with "-days x"
  # use special .cnf, because with normal one no valid selfsigned
  # certificate is created
  export RANDFILE=/dev/random
  openssl req $@ -config ssleay.cnf \
    -new -x509 -nodes -out /etc/apache2/ssl/apache.pem \
    -keyout /etc/apache2/ssl/apache.pem -days 365
  chmod 600 /etc/apache2/ssl/apache.pem
  ln -sf /etc/apache2/ssl/apache.pem \
  /etc/apache2/ssl/`/usr/bin/openssl \
  x509 -noout -hash < /etc/apache2/ssl/apache.pem`.0
</source>


====Asetetaan Apache kuuntelemaan oikeaa porttia====
Tässä alkuperäistä varmenteen luovaa skriptiä on muutettu lisäämällä valitsin <tt>-days 365</tt> ja korjattu asetustiedoston polku. Huomaa, että joissain järjestelmissä Apachen asetustiedoston polku saattaa olla jokin muu kuin <tt>/etc/apache2</tt>.
Lisää tiedostoon '''/etc/apache2/ports.conf''' rivi:
 
Skripti tarvitsee asetustiedoston, joka on samassa hakemistossa kuin itse skripti ja jonka tiedostonimi on <tt>ssleay.cnf</tt>. Tiedoston sisällön tulee olla kutakuinkin seuraava:
<source lang="bash">
  #
  # SSLeay example configuration file.
  #
  RANDFILE                = $ENV::HOME/.rnd
  [ req ]
  default_bits            = 1024
  default_keyfile        = privkey.pem
  distinguished_name      = req_distinguished_name
  [ req_distinguished_name ]
  countryName                    = Maan nimi (2-kirjaiminen koodi)
  countryName_default            = FI
  countryName_min                = 2
  countryName_max                = 2
  stateOrProvinceName            = Lääni
  stateOrProvinceName_default    = Uusimaa
  localityName                    = Kaupunki
  organizationName                = Organisaation nimi (esim, yritys)
  organizationName_max            = 64
  organizationalUnitName          = Yksikön nimi (esim. osasto)
  organizationalUnitName_max      = 64
  commonName                      = Palvelimen nimi (esim. www.palvelin.fi)
  commonName_max                  = 64
  emailAddress                    = Sähköpostiosoite
  emailAddress_max                = 40
</source>
 
Tämän lisäksi hakemisto <tt>/etc/apache2/ssl</tt> on luotava ja sen omistajaksi on asetettava pääkäyttäjä (<tt>chown root /etc/apache2/ssl</tt>).
 
==SSL:n käyttöönotto ==
*Ladataan Apachen SSL-moduuli
a2enmod ssl
*Asetetaan Apache kuuntelemaan oikeaa porttia lisäämällä tiedostoon <tt>/etc/apache2/ports.conf</tt> rivi:
  Listen 443
  Listen 443
443 on https:n oletus portti.
:443 on [[wikipedia:fi:https|https:n]] oletusportti.
 
*Asetetaan SSL-suojatuille sivuille omat asetukset. Kopioidaan asetustiedoston pohja:
====SSL-suojatuille sivuille omat asetukset====
  cp /etc/apache2/sites-available/default /etc/apache2/sites-available/ssl
  sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/ssl
*Lisätään nyt luotuun tiedostoon (<tt>/etc/apache2/sites-available/ssl</tt>) kahdelle ensimmäiselle riville porttinumerot tyyliin
Lisää kahdelle ensimmäiselle riville porttinumerot tähän tapaan:
  NameVirtualHost *:443
  NameVirtualHost *:443
  <virtualhost *:443>
  <virtualhost *:443>
Ja laita <virutalhost *:443>-tagin sisään rivit:
*Lisätään <virtualhost *:443>-tagin sisään rivit:
  SSLEngine On
  SSLEngine On
  SSLCertificateFile /etc/apache2/ssl/apache.pem
  SSLCertificateFile /etc/apache2/ssl/apache.pem
Aktivoidaan asetukset.
'''Tai''' vaihtoehtoisesti käytettäessä uudempaa Ubuntu 12.04:n kanssa toimivaa komentoa
  sudo a2ensite ssl
SSLEngine on
 
SSLCertificateFile /etc/apache2/ssl/apache.crt
Lopuksi käynnistetään Apache uusiksi, jotta kaikki muutokset tulevat voimaan.
SSLCertificateKeyFile /etc/apache2/ssl/apache.key
  sudo /etc/init.d/apache2 force-reload
*Aktivoidaan asetukset:
  a2ensite ssl
*Käynnistetään lopuksi Apache uudelleen, jotta kaikki muutokset tulevat voimaan.
  apache2ctl restart


Nyt salaus pitäisi tulla käyttöön, kun sivuille mennään https-alkuisella osoitteella http:n sijaan.
Nyt salaus pitäisi tulla käyttöön, kun sivuille mennään https-alkuisella osoitteella http:n sijaan.


====Mod rewrite====
==Salauksen käyttöpakko==
Nyt käyttäjä pystyy valitsemaan käyttääkö hän salausta vai ei. Usein halutaan pakottaa käyttäjä käyttämään salattua yhteyttä. Se onnistuu Mod rewritella.
Nyt käyttäjä pystyy valitsemaan, käyttääkö hän salausta vai ei. Usein halutaan pakottaa käyttäjä käyttämään salattua yhteyttä. Se onnistuu rewrite-moduulilla.


Aktoivoidaan taas oikea moduuli.
*Aktoivoidaan taas oikea moduuli.
  sudo a2enmod rewrite
  a2enmod rewrite
Muokataan tiedostoa '''/etc/apache2/sites-available/default''' lisäämällä <VirtualHost *>-tagin sisään:
*Muokataan tiedostoa <tt>/etc/apache2/sites-available/default</tt> lisäämällä <VirtualHost *>-tagin sisään:
<source lang="bash">
  RewriteEngine  on
  RewriteEngine  on
  RewriteCond    %{SERVER_PORT} ^80$
  RewriteCond    %{SERVER_PORT} ^80$
Rivi 41: Rivi 110:
  RewriteLog      "/var/log/apache2/rewrite.log"
  RewriteLog      "/var/log/apache2/rewrite.log"
  RewriteLogLevel 2
  RewriteLogLevel 2
Nyt http://domain.com/salainen/ ohjautuu automaattisesti SSL-salattuun yhteyteen http://domain.com/salainen/. Jos haluat kaikki sivut SSL-salauksen alle voit jättää edelliseen hakemiston kohdalle pelkästään /:n. Eli jätä vain sana "salainen" pois.  
</source>
Nyt http://www.example.com/salainen/ ohjautuu automaattisesti SSL-salattuun yhteyteen https://www.example.com/salainen/. Jos haluat kaikki sivut SSL-salauksen alle voit jättää edelliseen hakemiston kohdalle pelkästään /:n. Eli jätä vain sana "salainen" pois.  


Muutokset tulevat voimaan käynnistämällä Apache uusiksi.
Muutokset tulevat voimaan käynnistämällä Apache uusiksi.
  sudo /etc/init.d/apache2 force-reload
  apache2ctl restart


==Linkkejä==
== Katso myös ==
*[http://forum.ubuntu-fi.org/index.php?topic=313.0 Ohje Apache-palvelimen asennukseen Ubuntuun.]


* [[HST]] - Henkilökortti ja varmenteet.


==Aiheesta muualla==
*[https://forum.ubuntu-fi.org/index.php?topic=7213.0 Keskustelua tästä Ubuntu-fi:n foorumilla.]
*[https://forum.ubuntu-fi.org/index.php?topic=313.0 Ohje Apache-palvelimen asennukseen Ubuntuun.]


[[Luokka:Apache]]
[[Luokka:Apache]]
[[Luokka:Palvelimet]]
[[Luokka:Ohjeet]]
[[Luokka:Ohjeet]]
[[Luokka:Opetusmateriaalit]]
[[Luokka:Opetusmateriaalit]]
[[Luokka:Tietoturva]]

Nykyinen versio 21. marraskuuta 2020 kello 21.25

HTTPS-protokolla mahdollistaa verkkoliikenteen salaamisen SSL-yhteyskäytännöllä. Tässä oppaassa otetaan käyttöön Apachen HTTPS-tuki.

Varmenne[muokkaa]

SSL-salausta käytettäessä tarvitaan varmenne (sertifikaatti). Varmenteen avulla käyttäjä voi paremmin selvittää, minkä palvelimen kanssa verkossa todellisuudessa asioi.

Aloitetaan luomalla varmenne, joka on voimassa halutun ajan. Vanhemmissa järjestelmissä tämä onnistuu komennolla

apache2-ssl-certificate -days 365

Uudemmissa järjestelmissä komentoa apache2-ssl-certificate tai siihen liittyvää asetustiedostoa ei löydy. Ainakin Ubuntu 12.04 voi siinä tapauksessa käyttää komentoa:

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt

ja vastaamalla kysymyksiin. Muuten on parasta luoda varmennetiedosto itse seuraavalla skriptillä:

  #!/bin/sh -e
  if [ "$1" != "--force" -a -f /etc/apache2/ssl/apache.pem ]; then
    echo "/etc/apache2/ssl/apache.pem exists!  Use \"$0 --force.\""
    exit 0
  fi
  if [ "$1" = "--force" ]; then
    shift
  fi     
  echo
  echo creating selfsigned certificate
  echo "replace it with one signed by a certification authority (CA)"
  echo
  echo enter your ServerName at the Common Name prompt
  echo
  echo If you want your certificate to expire after x days call this programm 
  echo with "-days x" 
  # use special .cnf, because with normal one no valid selfsigned
  # certificate is created
  export RANDFILE=/dev/random
  openssl req $@ -config ssleay.cnf \
    -new -x509 -nodes -out /etc/apache2/ssl/apache.pem \
    -keyout /etc/apache2/ssl/apache.pem -days 365
  chmod 600 /etc/apache2/ssl/apache.pem
  ln -sf /etc/apache2/ssl/apache.pem \
  /etc/apache2/ssl/`/usr/bin/openssl \
  x509 -noout -hash < /etc/apache2/ssl/apache.pem`.0

Tässä alkuperäistä varmenteen luovaa skriptiä on muutettu lisäämällä valitsin -days 365 ja korjattu asetustiedoston polku. Huomaa, että joissain järjestelmissä Apachen asetustiedoston polku saattaa olla jokin muu kuin /etc/apache2.

Skripti tarvitsee asetustiedoston, joka on samassa hakemistossa kuin itse skripti ja jonka tiedostonimi on ssleay.cnf. Tiedoston sisällön tulee olla kutakuinkin seuraava:

  #
  # SSLeay example configuration file.
  #
  RANDFILE                = $ENV::HOME/.rnd
  [ req ]
  default_bits            = 1024
  default_keyfile         = privkey.pem
  distinguished_name      = req_distinguished_name
  [ req_distinguished_name ]
  countryName                     = Maan nimi (2-kirjaiminen koodi)
  countryName_default             = FI
  countryName_min                 = 2
  countryName_max                 = 2
  stateOrProvinceName             = Lääni
  stateOrProvinceName_default     = Uusimaa
  localityName                    = Kaupunki
  organizationName                = Organisaation nimi (esim, yritys)
  organizationName_max            = 64
  organizationalUnitName          = Yksikön nimi (esim. osasto)
  organizationalUnitName_max      = 64
  commonName                      = Palvelimen nimi (esim. www.palvelin.fi)
  commonName_max                  = 64
  emailAddress                    = Sähköpostiosoite
  emailAddress_max                = 40

Tämän lisäksi hakemisto /etc/apache2/ssl on luotava ja sen omistajaksi on asetettava pääkäyttäjä (chown root /etc/apache2/ssl).

SSL:n käyttöönotto[muokkaa]

  • Ladataan Apachen SSL-moduuli
a2enmod ssl
  • Asetetaan Apache kuuntelemaan oikeaa porttia lisäämällä tiedostoon /etc/apache2/ports.conf rivi:
Listen 443
443 on https:n oletusportti.
  • Asetetaan SSL-suojatuille sivuille omat asetukset. Kopioidaan asetustiedoston pohja:
cp /etc/apache2/sites-available/default /etc/apache2/sites-available/ssl
  • Lisätään nyt luotuun tiedostoon (/etc/apache2/sites-available/ssl) kahdelle ensimmäiselle riville porttinumerot tyyliin
NameVirtualHost *:443
<virtualhost *:443>
  • Lisätään <virtualhost *:443>-tagin sisään rivit:
SSLEngine On
SSLCertificateFile /etc/apache2/ssl/apache.pem

Tai vaihtoehtoisesti käytettäessä uudempaa Ubuntu 12.04:n kanssa toimivaa komentoa

SSLEngine on
SSLCertificateFile /etc/apache2/ssl/apache.crt
SSLCertificateKeyFile /etc/apache2/ssl/apache.key
  • Aktivoidaan asetukset:
a2ensite ssl
  • Käynnistetään lopuksi Apache uudelleen, jotta kaikki muutokset tulevat voimaan.
apache2ctl restart

Nyt salaus pitäisi tulla käyttöön, kun sivuille mennään https-alkuisella osoitteella http:n sijaan.

Salauksen käyttöpakko[muokkaa]

Nyt käyttäjä pystyy valitsemaan, käyttääkö hän salausta vai ei. Usein halutaan pakottaa käyttäjä käyttämään salattua yhteyttä. Se onnistuu rewrite-moduulilla.

  • Aktoivoidaan taas oikea moduuli.
a2enmod rewrite
  • Muokataan tiedostoa /etc/apache2/sites-available/default lisäämällä <VirtualHost *>-tagin sisään:
 RewriteEngine   on
 RewriteCond     %{SERVER_PORT} ^80$
 RewriteRule     ^/salainen(.*)$ https://%{SERVER_NAME}/salainen$1 [L,R]
 RewriteLog      "/var/log/apache2/rewrite.log"
 RewriteLogLevel 2

Nyt http://www.example.com/salainen/ ohjautuu automaattisesti SSL-salattuun yhteyteen https://www.example.com/salainen/. Jos haluat kaikki sivut SSL-salauksen alle voit jättää edelliseen hakemiston kohdalle pelkästään /:n. Eli jätä vain sana "salainen" pois.

Muutokset tulevat voimaan käynnistämällä Apache uusiksi.

apache2ctl restart

Katso myös[muokkaa]

  • HST - Henkilökortti ja varmenteet.

Aiheesta muualla[muokkaa]