Mainos / Advertisement:

Ero sivun ”Openssl” versioiden välillä

Kohteesta Taisto
Siirry navigaatioon Siirry hakuun
 
(44 välissä olevaa versiota samalta käyttäjältä ei näytetä)
Rivi 1: Rivi 1:
 +
<languages/>
 +
<translate>
  
== Asennus ==
+
<!--T:102-->
 +
OpenSSL avoimen lähdekoodin on työkalu SSL v2/v3- ja TLS v1 -protokollien käsittelyyn. Sen avulla on myös mahdollista mm. luoda ja hallita julkisia ja yksityisiä salausavaimia, X.509-sertifikaatteja, laskea tarkistussummia ja käsitellä S/MIME-allekirjoitettuja tai -salattuja sähköposteja. HTTPS-salattu verkkosivusto voidaan toteuttaa OpenSSL:n ja esimerkiksi Apachen avulla. OpenVPN on OpenSSL:n avulla toteutettu, avoin VPN-protokolla.
  
 +
== Asennus == <!--T:1-->
  
 +
 +
<!--T:2-->
 
1. Asennetaan Openssl
 
1. Asennetaan Openssl
  
   aptitude install openssl
+
   <!--T:3-->
 +
[[aptitude]] install openssl
 +
 
 +
<!--T:4-->
 +
2. Luodaan kansio etc/ssl/localcerts . Tähän kansioon tallennetaan itseallekirjoitetut sertifikaatit joita luodaan tämän ohjeen aikana.
 +
 
 +
<!--T:5-->
 +
mkdir /etc/ssl/localcerts
 +
 
 +
== Asentaminen lähdekoodista ==
 +
 
 +
Lataa uusin version lähdekoodista (Lataa täältä: https://www.openssl.org/source/)
 +
 
 +
<pre>
 +
wget https://www.openssl.org/source/openssl-1.1.0h.tar.gz
 +
tar -xvzf openssl-*.tar.gz
 +
cd openssl-*
 +
./config --prefix=/usr/
 +
make
 +
sudo make install
 +
</pre>
  
2. Luodaan kansio etc/ssl/localcerts
+
Tarkista version
  
mkdir /etc/ssl/localcerts
+
  openssl version
  
== openssl.cnf ==
+
== openssl.cnf == <!--T:6-->
  
Laitetaan openssl.conf tiedostoon oletuskonffit helpottamaan myöhempää käyttöä. Korjaa *_default nimellä olevat kohdat sopivilla vaihtoehdoilla.
+
<!--T:7-->
 +
Laitetaan openssl.conf tiedostoon oletuskonffit helpottamaan myöhempää käyttöä. Voit muokata *_default nimellä olevat kohdat sopivilla vaihtoehdoilla. Tämä helpottaa kun alamme tekemään sertifikaattia. Tiedot voi muokata sertifikaatin asennuksen aikana
  
   [ req_distinguished_name ]
+
   <!--T:8-->
 +
[ req_distinguished_name ]
 
   countryName                    = Country Name (2 letter code)
 
   countryName                    = Country Name (2 letter code)
 
   countryName_default            = FI
 
   countryName_default            = FI
  
 +
<!--T:9-->
 
Oletus maa-asetus (maakoodi), esim. FI
 
Oletus maa-asetus (maakoodi), esim. FI
  
   countryName_min                = 2
+
   <!--T:10-->
 +
countryName_min                = 2
 
   countryName_max                = 2
 
   countryName_max                = 2
 
    
 
    
Rivi 29: Rivi 59:
  
  
Kaupungin nimi, esim. Helsinki
+
<!--T:11-->
 +
Kaupungin nimi, esim. Helsinki
 
   localityName                    = Locality Name (eg, city)
 
   localityName                    = Locality Name (eg, city)
 
   localityName_default            = Kaupunki
 
   localityName_default            = Kaupunki
  
  
 +
<!--T:12-->
 
Organisaation nimi, esimerkiksi yritys  
 
Organisaation nimi, esimerkiksi yritys  
 
   0.organizationName              = Organization Name (eg, company)
 
   0.organizationName              = Organization Name (eg, company)
Rivi 40: Rivi 72:
 
Toinen organisaation nimi (vapaaavalintainen)
 
Toinen organisaation nimi (vapaaavalintainen)
  
   # we can do this but it is not needed normally :-)
+
   <!--T:13-->
 +
# we can do this but it is not needed normally :-)
 
   #1.organizationName            = Second Organization Name (eg, company)
 
   #1.organizationName            = Second Organization Name (eg, company)
 
   #1.organizationName_default    = World Wide Web Pty Ltd
 
   #1.organizationName_default    = World Wide Web Pty Ltd
  
   organizationalUnitName          = Organizational Unit Name (eg, section)
+
   <!--T:14-->
 +
organizationalUnitName          = Organizational Unit Name (eg, section)
 
   #organizationalUnitName_default =
 
   #organizationalUnitName_default =
  
  
 +
<!--T:15-->
 
Sertifikaatille nimi (verkko-osoite)
 
Sertifikaatille nimi (verkko-osoite)
  
   commonName                      = Common Name (e.g. server FQDN or YOUR name)
+
   <!--T:16-->
 +
commonName                      = Common Name (e.g. server FQDN or YOUR name)
 
   commonName_max                  = 64
 
   commonName_max                  = 64
  
 +
<!--T:17-->
 
Sähköpostiosoite ssl sertifikaatilla (valinnainen).  
 
Sähköpostiosoite ssl sertifikaatilla (valinnainen).  
  
   emailAddress                    = Email Address
+
   <!--T:18-->
 +
emailAddress                    = Email Address
 
   emailAddress_max                = 64
 
   emailAddress_max                = 64
 
   emailAddress_default            = [email protected]
 
   emailAddress_default            = [email protected]
  
  
 +
<!--T:19-->
 
Määritettyjä *_default ei tarvitse määrittää etukäteen mutta suositeltavaa on. Tämä helpottaa sertifikaatin tekoa.
 
Määritettyjä *_default ei tarvitse määrittää etukäteen mutta suositeltavaa on. Tämä helpottaa sertifikaatin tekoa.
  
Lisätään '''subjectAltName = @alt_names''' konffi tiedostoon
+
=== Lisäominaisuuksia === <!--T:20-->
 +
 
 +
<!--T:21-->
 +
Sertifikaattiin on mahdollista listätä erilaisia ominaisuuksia. Yleisesti ja kätevä on ollut Subject Alt Name joka mahdollistaa sertifikaatin toimivuuden useilla eri domaineilla ja IP-osoitteilla.
 +
 
 +
==== Subject Alt Name ==== <!--T:22-->
  
  [ v3_req ]
+
<!--T:23-->
 +
Lisätään '''subjectAltName = @alt_names''' konffi tiedostoon. (Alla olevassa esimerkissä muitakin tietoja)
  
   #Extensions to add to a certificate request
+
   <!--T:24-->
 +
[ v3_req ]
 +
 
 +
  <!--T:25-->
 +
#Extensions to add to a certificate request
  
   basicConstraints = CA:FALSE
+
  keyUsage = nonRepudiation, digitalSignature, keyEncipherment
+
   <!--T:26-->
 +
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
 
   subjectAltName = @alt_names
 
   subjectAltName = @alt_names
  
 +
 +
<!--T:27-->
 
Lisää alt_names konffiin ja verkko-osoitteet, jossa sertifikaatti on voimassa
 
Lisää alt_names konffiin ja verkko-osoitteet, jossa sertifikaatti on voimassa
  
   [alt_names]
+
   <!--T:28-->
 +
[alt_names]
 
   DNS.1 = helenius.dy.fi
 
   DNS.1 = helenius.dy.fi
 
   DNS.2 = datatekniikka.fi
 
   DNS.2 = datatekniikka.fi
  
 +
<!--T:29-->
 
ja IP-osoiteet jossa sertifikaatti voimassa.
 
ja IP-osoiteet jossa sertifikaatti voimassa.
  
   IP.1 = 0.0.0.0
+
   <!--T:30-->
 +
IP.1 = 0.0.0.0
 
   IP.2 = 1.1.1.1
 
   IP.2 = 1.1.1.1
  
 +
==== CRL ==== <!--T:31-->
 +
 +
<!--T:32-->
 +
Määritä nämä openssl.conf tiedostossa:
 +
 +
  <!--T:33-->
 +
database        = /etc/ssl/*/index.txt
 +
  crlnumber = /etc/ssl/*/crlnumber      # the current crl number
 +
 +
<!--T:34-->
 +
Poista risuaita:
 +
  crl_extensions  = crl_ext
 +
 +
  <!--T:35-->
 +
default_days    = 365                  # how long to certify for
 +
  default_crl_days= 30                    # how long before next CRL
 +
 +
<!--T:36-->
 +
ja muuta:
 +
 +
  <!--T:37-->
 +
default_md      = sha256                        # which md to use.
 +
  preserve        = no                    # keep passed DN ordering
 +
 +
 +
<!--T:38-->
 +
Lisää tämä ->
 +
 +
  <!--T:39-->
 +
[ v3_req ]
 +
  #Extensions to add to a certificate request
 +
  crlDistributionPoints = URI:http://www.example.com/crl.crl
 +
 +
 +
<!--T:40-->
 +
Määritetään crl tiedosto joka täytyy löytyä osoitteesta.
 +
 +
<!--T:41-->
 +
Luo kansio
 +
 +
  <!--T:42-->
 +
mkdir -p /etc/ssl/keys
 +
 +
<!--T:43-->
 +
Luodaan tiedosto:
 +
 +
  <!--T:44-->
 +
echo 1 > /etc/ssl/keys/index.txt
 +
 +
<!--T:45-->
 +
Luodaan crl tiedosto:
 +
 +
  <!--T:46-->
 +
openssl ca -keyfile rootCA.key -cert rootCA.crt -gencrl -out rooCA.crl
 +
 +
<!--T:47-->
 +
Muuta lisättävää...
  
 +
  <!--T:48-->
 +
[ v3_req ]
 +
  #Extensions to add to a certificate request
 +
  extendedKeyUsage = serverAuth,clientAuth
 +
  authorityInfoAccess = OCSP;URI:http://www.example.com
  
=== Esimerkkejä SubjectAltName ===
+
==== Esimerkkejä SubjectAltName ==== <!--T:49-->
  
 +
<!--T:50-->
 
Kaikki numeroidaan loogisesti erikseen... Openssl ei ilmoita virheitä numeroinnista, vaan menee aina alimman mukaan (lukee päälle)
 
Kaikki numeroidaan loogisesti erikseen... Openssl ei ilmoita virheitä numeroinnista, vaan menee aina alimman mukaan (lukee päälle)
  
   DNS.1 = *.domain.com
+
   <!--T:51-->
 +
DNS.1 = *.domain.com
  
 +
<!--T:52-->
 
Wildcard eli suomeksi jokeri, on sertifikaatti joka on voimassa kaikissa alidomaineissa. Esimerkiksi: www.domain.com ja m.domain.com on automaattisesti wildcard alla... HUOM! Ei domain.com ja www.name.domain.com ole wildcard sertifikaatissa.
 
Wildcard eli suomeksi jokeri, on sertifikaatti joka on voimassa kaikissa alidomaineissa. Esimerkiksi: www.domain.com ja m.domain.com on automaattisesti wildcard alla... HUOM! Ei domain.com ja www.name.domain.com ole wildcard sertifikaatissa.
  
   DNS.2 = domain.com
+
   <!--T:53-->
 +
DNS.2 = domain.com
  
 +
<!--T:54-->
 
Ylätason domain
 
Ylätason domain
  
   DNS.3 = www.domain.com
+
   <!--T:55-->
 +
DNS.3 = www.domain.com
  
 +
<!--T:56-->
 
Alidomain, esim. www.domain.com ja m.domain.com.
 
Alidomain, esim. www.domain.com ja m.domain.com.
  
   DNS.4 = www.domain2.com
+
   <!--T:57-->
 +
DNS.4 = www.domain2.com
  
 +
<!--T:58-->
 
Sertifikaatit voi osoittaa usealle eri domainille.
 
Sertifikaatit voi osoittaa usealle eri domainille.
  
   IP.1 0.0.0.0.
+
   <!--T:59-->
 +
IP.1 0.0.0.0.
  
 +
<!--T:60-->
 
Laitetaan IP-osoiteet, missä sertifikaatti on voimassa.
 
Laitetaan IP-osoiteet, missä sertifikaatti on voimassa.
  
   IP.2 1.1.1.1
+
   <!--T:61-->
 +
IP.2 1.1.1.1
  
 +
<!--T:62-->
 
Myös useita IP-osoitteita voi määrittää
 
Myös useita IP-osoitteita voi määrittää
  
== RootCA  - Root sertifikaatti==
+
=== Konffit === <!--T:63-->
 +
 
 +
  <!--T:64-->
 +
[ req_distinguished_name ]
 +
  countryName                    = Country Name (2 letter code)
 +
  countryName_default            = FI
 +
 +
  countryName_min                = 2
 +
  countryName_max                = 2
 +
 
 +
  stateOrProvinceName            = State or Province Name (full name)
 +
  stateOrProvinceName_default    = Lääni/Provinssi
 +
 +
  localityName                    = Locality Name (eg, city)
 +
  localityName_default            = Kaupunki
 +
 +
  0.organizationName              = Organization Name (eg, company)
 +
  0.organizationName_default      = Organisaation nimi
 +
 +
  # we can do this but it is not needed normally :-)
 +
  #1.organizationName            = Second Organization Name (eg, company)
 +
  #1.organizationName_default    = World Wide Web Pty Ltd
 +
 +
  organizationalUnitName          = Organizational Unit Name (eg, section)
 +
  #organizationalUnitName_default =
 +
 +
  commonName                      = Common Name (e.g. server FQDN or YOUR name)
 +
  commonName_max                  = 64
 +
 +
  emailAddress                    = Email Address
 +
  emailAddress_max                = 64
 +
  emailAddress_default            = [email protected]
 +
 
 +
 
 +
  <!--T:65-->
 +
[ v3_req ]
 +
 +
  #Extensions to add to a certificate request
 +
 +
  basicConstraints = CA:FALSE
 +
  keyUsage = nonRepudiation, digitalSignature, keyEncipherment
 +
  subjectAltName = @alt_names
 +
 +
  [alt_names]
 +
  DNS.1 = helenius.dy.fi
 +
  DNS.2 = datatekniikka.fi
 +
  IP.1 = 0.0.0.0
 +
  IP.2 = 1.1.1.1
 +
 
 +
== RootCA  - Root sertifikaatti== <!--T:66-->
  
 +
<!--T:67-->
 
1. Luodaan RSA avain
 
1. Luodaan RSA avain
  
   openssl genrsa -des3 -out /etc/ssl/localcerts/rootCA.key 4096
+
   <!--T:68-->
 +
openssl genrsa -des3 -out /etc/ssl/localcerts/rootCA.key 4096
  
 +
<!--T:69-->
 
* des3 = salasana suojattu
 
* des3 = salasana suojattu
 
* rootCA.key = tiedoston nimi
 
* rootCA.key = tiedoston nimi
 
* 4096 = RSA avaimen pituus
 
* 4096 = RSA avaimen pituus
  
 +
<!--T:70-->
 +
Komento luo RSA avaimen ja tallentaa tiedostoon
 +
 +
  <!--T:71-->
 +
Generating a 4096 bit RSA private key
 +
  ............................................+++
 +
  .................................................+++
 +
  writing new private key to 'rootCA.key'
 +
 +
<!--T:72-->
 
2. Luodaan ROOT sertifikaatti
 
2. Luodaan ROOT sertifikaatti
  
  openssl req -x509 -new -nodes -key /etc/ssl/localcerts/rootCA.key -days 3650 -out /etc/ssl/localcerts/rootCA.crt
+
  <!--T:73-->
 +
openssl req -sha256 -x509 -new -nodes -key /etc/ssl/localcerts/rootCA.key -days 3650 -out /etc/ssl/localcerts/rootCA.crt
  
 +
<!--T:74-->
 
* -days = sertifikaatin voimassaoloaika, esimerkissä 10 vuotta
 
* -days = sertifikaatin voimassaoloaika, esimerkissä 10 vuotta
 
* -key = tiedosto jossa RSA avain sijaitsee
 
* -key = tiedosto jossa RSA avain sijaitsee
Rivi 132: Rivi 326:
 
* -out rootCA.crt = sertifikaatti tiedosto
 
* -out rootCA.crt = sertifikaatti tiedosto
  
== Luodaan alisertifikaatti ==
+
<!--T:75-->
 +
Komento tulostaa ja sinun tulee täyttää tietyt kohdat. Jos sulkeiden [] sisällä vastaa määrittämääsi, voit jättää kentät tyhjäksi.
 +
 
 +
  <!--T:76-->
 +
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.
 +
 
 +
  ----
 +
Määritä maakoodi:
 +
  Country Name (2 letter code) [FI]:
 +
Määritä Osavaltio tai provinssi:
 +
  State or Province Name (full name) []: Uusimaa
 +
Määritä sijainti, esimerkiksi kaupunki:
 +
  Locality Name (eg, city) []: Helsinki
 +
Määritä organisaatiosi nimi, esimerkiksi yritys:
 +
  Organization Name (eg, company) [My Company Ltd]:Taistowiki Certificate Authority
 +
Määritä organisaation  yksikön nimi:
 +
  Organizational Unit Name (eg, section) []:
 +
Määritä esimerkiksi palvelimesi isäntänimi:
 +
  Common Name (eg, your name or your server's hostname) []:taistowiki.fi
 +
Määritä sähköpostiosoite:
 +
  Email Address []:[email protected]
 +
 
 +
<!--T:77-->
 +
Nyt ROOT sertifikaatti on luotu ja valmiina käytettäväksi.
 +
 
 +
== Asiakas sertifikaatit == <!--T:78-->
  
ROOT sertifikaatti varmentaa alisertifikaatit. Luo ensin root sertifikaatti ensin.
+
<!--T:79-->
 +
Sinun tulee luoda ROOT sertifikaatti ensin
  
 +
<!--T:80-->
 
1. Luodaan RSA avain  
 
1. Luodaan RSA avain  
  
   openssl genrsa -des3 -out /etc/ssl/localcerts/ssl.key 2048
+
   <!--T:81-->
 +
openssl genrsa -des3 -out /etc/ssl/localcerts/ssl.key 2048
  
 +
<!--T:82-->
 
* des3 = salasana suojattu
 
* des3 = salasana suojattu
 
* ssl.key = tiedoston nimi
 
* ssl.key = tiedoston nimi
 
* 2048 = RSA avaimen pituus
 
* 2048 = RSA avaimen pituus
  
 +
<!--T:83-->
 
Openssl on bugi jos laittaa alisertifikaateille salasana suojaus ja käyttää wildcard ominaisuutta.  
 
Openssl on bugi jos laittaa alisertifikaateille salasana suojaus ja käyttää wildcard ominaisuutta.  
  
 +
<!--T:84-->
 
2. Luodaan sertifikaatin allekirjoituspyyntö
 
2. Luodaan sertifikaatin allekirjoituspyyntö
  
   openssl req -new -out ssl.csr -key /etc/ssl/localcerts/ssl.key -config /etc/ssl/openssl.cnf
+
   <!--T:85-->
 +
openssl req -new -out ssl.csr -key /etc/ssl/localcerts/ssl.key -config /etc/ssl/openssl.cnf
  
 +
<!--T:86-->
 
3. Luodaan sertifikaatti ROOT sertifikaatin alle
 
3. Luodaan sertifikaatti ROOT sertifikaatin alle
  
   openssl x509 -req -in /etc/ssl/localcerts/ssl.csr -CA /etc/ssl/localcerts/rootCA.crt -CAkey /etc/ssl/localcerts/rootCA.key -CAcreateserial  -out /etc/ssl/localcerts/ssl.crt -days 365 -extensions v3_req -extfile /etc/ssl/openssl.cnf
+
   <!--T:87-->
 +
openssl x509 -req -sha256 -in /etc/ssl/localcerts/ssl.csr -CA /etc/ssl/localcerts/rootCA.crt -CAkey /etc/ssl/localcerts/rootCA.key -CAcreateserial  -out /etc/ssl/localcerts/ssl.crt -days 365 -extensions v3_req -extfile /etc/ssl/openssl.cnf
  
 +
<!--T:88-->
 +
* -sha256 = Käytetään SHA256, suositus
 
* -days 365 = sertifikaatin voimassaoloaika
 
* -days 365 = sertifikaatin voimassaoloaika
 
* -extensions v3_req -extfile /etc/ssl/openssl.cnf = Openssl konffi tiedosto, josta haetaan '''subjectAltName''' tiedot
 
* -extensions v3_req -extfile /etc/ssl/openssl.cnf = Openssl konffi tiedosto, josta haetaan '''subjectAltName''' tiedot
  
== Sertifikaattien siirto pfx-tiedoston avulla ==
+
== Muuta ==
 +
 
 +
=== Bundle sertifikaatti === <!--T:89-->
 +
 
 +
<!--T:90-->
 +
Esimerkissämme on käytettävä SSL sertifikaatit:
 +
 
 +
<!--T:91-->
 +
# Root CA Certificate - AddTrustExternalCARoot.crt
 +
# Intermediate CA Certificate 1 - UTNAddTrustSGCCA.crt
 +
# Intermediate CA Certificate 2 - ComodoUTNSGCCA.crt
 +
# Intermediate CA Certificate 3 - EssentialSSLCA_2.crt
 +
# Your SSL Certificate - yourDomain.crt
 +
 
 +
<!--T:92-->
 +
jotka pitäisi saada samalle palvelimelle. Bundle Crt mahdollistaa yhteen sertifikaatti tiedostoon useita sertifikaatteja.
 +
 
 +
 
 +
<!--T:93-->
 +
Linux:
 +
cat EssentialSSLCA_2.crt ComodoUTNSGCCA.crt UTNAddTrustSGCCA.crt AddTrustExternalCARoot.crt > yourDomain.ca-bundle
 +
 
 +
<!--T:94-->
 +
Windows:
 +
copy EssentialSSLCA_2.crt + ComodoUTNSGCCA.crt + UTNAddTrustSGCCA.crt + AddTrustExternalCARoot.crt yourDomain.ca-bundle
 +
 
 +
=== Sertifikaattien siirto pfx-tiedoston avulla === <!--T:95-->
  
 +
<!--T:96-->
 
Openssl sertifikaattia voidaan käyttää myös muillakin webbiservereillä. Voit siirtää mm. IIS:ään pfx tiedoston avulla.
 
Openssl sertifikaattia voidaan käyttää myös muillakin webbiservereillä. Voit siirtää mm. IIS:ään pfx tiedoston avulla.
  openssl pkcs12 -export -out ssl.pfx -inkey ssl.key -in ssl.crt -certfile ssl.crt
 
  
 +
  <!--T:97-->
 +
openssl pkcs12 -export -out ssl.pfx -inkey ssl.key -in ssl.crt -certfile rootCA.crt
 +
 +
<!--T:98-->
 
Sinun tulee määrittää tiedostoon salasana.
 
Sinun tulee määrittää tiedostoon salasana.
  
  
 +
<!--T:99-->
 
* -export -out ssl.pfx = PFX tiedosto jonne sertifikaatit laitetaan
 
* -export -out ssl.pfx = PFX tiedosto jonne sertifikaatit laitetaan
 
* -inkey ssl.key = RSA avain tiedosto
 
* -inkey ssl.key = RSA avain tiedosto
 
* -certfile ssl.crt = Root sertifikaatti
 
* -certfile ssl.crt = Root sertifikaatti
  
== Katso lisää ==
+
=== CRT tiedosto konvertointi PEM ===
 +
 
 +
Muunto onnistuu helposti komennolla
 +
 
 +
  openssl x509 -in mycert.crt -out mycert.pem -outform PEM
 +
 
 +
=== Decrypt RSA privaattiavain ===
 +
 
 +
Decrypt onnistuu helposti seuraavalla komennolla
 +
 
 +
  openssl rsa -in key.key -out newkey.key
 +
 
 +
== Katso lisää == <!--T:100-->
 +
 
 +
<!--T:101-->
 +
[[Apache2#HTTPS_.2F_SSL |Apache SSL]]
 +
 
 +
== Lähteet == <!--T:103-->
  
[[Apache2#HTTPS_.2F_SSL_HTTPS_salliminen_apacheen  |Apache SSL]]
+
<!--T:104-->
 +
http://linux.fi/wiki/OpenSSL
 +
</translate>

Nykyinen versio 9. kesäkuuta 2018 kello 19.55

Muut kielet:
suomi

OpenSSL avoimen lähdekoodin on työkalu SSL v2/v3- ja TLS v1 -protokollien käsittelyyn. Sen avulla on myös mahdollista mm. luoda ja hallita julkisia ja yksityisiä salausavaimia, X.509-sertifikaatteja, laskea tarkistussummia ja käsitellä S/MIME-allekirjoitettuja tai -salattuja sähköposteja. HTTPS-salattu verkkosivusto voidaan toteuttaa OpenSSL:n ja esimerkiksi Apachen avulla. OpenVPN on OpenSSL:n avulla toteutettu, avoin VPN-protokolla.

Asennus

1. Asennetaan Openssl

 aptitude install openssl

2. Luodaan kansio etc/ssl/localcerts . Tähän kansioon tallennetaan itseallekirjoitetut sertifikaatit joita luodaan tämän ohjeen aikana.

mkdir /etc/ssl/localcerts

Asentaminen lähdekoodista

Lataa uusin version lähdekoodista (Lataa täältä: https://www.openssl.org/source/)

wget https://www.openssl.org/source/openssl-1.1.0h.tar.gz
tar -xvzf openssl-*.tar.gz
cd openssl-*
./config --prefix=/usr/
make
sudo make install

Tarkista version

 openssl version

openssl.cnf

Laitetaan openssl.conf tiedostoon oletuskonffit helpottamaan myöhempää käyttöä. Voit muokata *_default nimellä olevat kohdat sopivilla vaihtoehdoilla. Tämä helpottaa kun alamme tekemään sertifikaattia. Tiedot voi muokata sertifikaatin asennuksen aikana

 [ req_distinguished_name ]
 countryName                     = Country Name (2 letter code)
 countryName_default             = FI

Oletus maa-asetus (maakoodi), esim. FI

 countryName_min                 = 2
 countryName_max                 = 2
 

Määritä lääni/provinssi, esim. Uusimaa

 stateOrProvinceName             = State or Province Name (full name)
 stateOrProvinceName_default     = Lääni/Provinssi


Kaupungin nimi, esim. Helsinki

 localityName                    = Locality Name (eg, city)
 localityName_default            = Kaupunki


Organisaation nimi, esimerkiksi yritys

 0.organizationName              = Organization Name (eg, company)
 0.organizationName_default      = Organisaation nimi
 

Toinen organisaation nimi (vapaaavalintainen)

 # we can do this but it is not needed normally :-)
 #1.organizationName             = Second Organization Name (eg, company)
 #1.organizationName_default     = World Wide Web Pty Ltd
 organizationalUnitName          = Organizational Unit Name (eg, section)
 #organizationalUnitName_default =


Sertifikaatille nimi (verkko-osoite)

 commonName                      = Common Name (e.g. server FQDN or YOUR name)
 commonName_max                  = 64

Sähköpostiosoite ssl sertifikaatilla (valinnainen).

 emailAddress                    = Email Address
 emailAddress_max                = 64
 emailAddress_default            = [email protected]


Määritettyjä *_default ei tarvitse määrittää etukäteen mutta suositeltavaa on. Tämä helpottaa sertifikaatin tekoa.

Lisäominaisuuksia

Sertifikaattiin on mahdollista listätä erilaisia ominaisuuksia. Yleisesti ja kätevä on ollut Subject Alt Name joka mahdollistaa sertifikaatin toimivuuden useilla eri domaineilla ja IP-osoitteilla.

Subject Alt Name

Lisätään subjectAltName = @alt_names konffi tiedostoon. (Alla olevassa esimerkissä muitakin tietoja)

 [ v3_req ]
 #Extensions to add to a certificate request


 keyUsage = nonRepudiation, digitalSignature, keyEncipherment
 subjectAltName = @alt_names


Lisää alt_names konffiin ja verkko-osoitteet, jossa sertifikaatti on voimassa

 [alt_names]
 DNS.1 = helenius.dy.fi
 DNS.2 = datatekniikka.fi

ja IP-osoiteet jossa sertifikaatti voimassa.

 IP.1 = 0.0.0.0
 IP.2 = 1.1.1.1

CRL

Määritä nämä openssl.conf tiedostossa:

 database        = /etc/ssl/*/index.txt
 crlnumber = /etc/ssl/*/crlnumber      # the current crl number

Poista risuaita:

  crl_extensions  = crl_ext
 default_days    = 365                   # how long to certify for
 default_crl_days= 30                    # how long before next CRL

ja muuta:

 default_md      = sha256                        # which md to use.
 preserve        = no                    # keep passed DN ordering


Lisää tämä ->

 [ v3_req ]
 #Extensions to add to a certificate request
 crlDistributionPoints = URI:http://www.example.com/crl.crl


Määritetään crl tiedosto joka täytyy löytyä osoitteesta.

Luo kansio

 mkdir -p /etc/ssl/keys

Luodaan tiedosto:

 echo 1 > /etc/ssl/keys/index.txt

Luodaan crl tiedosto:

 openssl ca -keyfile rootCA.key -cert rootCA.crt -gencrl -out rooCA.crl

Muuta lisättävää...

 [ v3_req ]
 #Extensions to add to a certificate request
 extendedKeyUsage = serverAuth,clientAuth
 authorityInfoAccess = OCSP;URI:http://www.example.com

Esimerkkejä SubjectAltName

Kaikki numeroidaan loogisesti erikseen... Openssl ei ilmoita virheitä numeroinnista, vaan menee aina alimman mukaan (lukee päälle)

 DNS.1 = *.domain.com

Wildcard eli suomeksi jokeri, on sertifikaatti joka on voimassa kaikissa alidomaineissa. Esimerkiksi: www.domain.com ja m.domain.com on automaattisesti wildcard alla... HUOM! Ei domain.com ja www.name.domain.com ole wildcard sertifikaatissa.

 DNS.2 = domain.com

Ylätason domain

 DNS.3 = www.domain.com

Alidomain, esim. www.domain.com ja m.domain.com.

 DNS.4 = www.domain2.com

Sertifikaatit voi osoittaa usealle eri domainille.

 IP.1 0.0.0.0.

Laitetaan IP-osoiteet, missä sertifikaatti on voimassa.

 IP.2 1.1.1.1

Myös useita IP-osoitteita voi määrittää

Konffit

 [ req_distinguished_name ]
 countryName                     = Country Name (2 letter code)
 countryName_default             = FI

 countryName_min                 = 2
 countryName_max                 = 2
  
 stateOrProvinceName             = State or Province Name (full name)
 stateOrProvinceName_default     = Lääni/Provinssi

 localityName                    = Locality Name (eg, city)
 localityName_default            = Kaupunki

 0.organizationName              = Organization Name (eg, company)
 0.organizationName_default      = Organisaation nimi

 # we can do this but it is not needed normally :-)
 #1.organizationName             = Second Organization Name (eg, company)
 #1.organizationName_default     = World Wide Web Pty Ltd

 organizationalUnitName          = Organizational Unit Name (eg, section)
 #organizationalUnitName_default =

 commonName                      = Common Name (e.g. server FQDN or YOUR name)
 commonName_max                  = 64

 emailAddress                    = Email Address
 emailAddress_max                = 64
 emailAddress_default            = [email protected]


 [ v3_req ]

 #Extensions to add to a certificate request

 basicConstraints = CA:FALSE
 keyUsage = nonRepudiation, digitalSignature, keyEncipherment
 subjectAltName = @alt_names

 [alt_names]
 DNS.1 = helenius.dy.fi
 DNS.2 = datatekniikka.fi
 IP.1 = 0.0.0.0
 IP.2 = 1.1.1.1

RootCA - Root sertifikaatti

1. Luodaan RSA avain

 openssl genrsa -des3 -out /etc/ssl/localcerts/rootCA.key 4096
  • des3 = salasana suojattu
  • rootCA.key = tiedoston nimi
  • 4096 = RSA avaimen pituus

Komento luo RSA avaimen ja tallentaa tiedostoon

 Generating a 4096 bit RSA private key
 ............................................+++
 .................................................+++
 writing new private key to 'rootCA.key'

2. Luodaan ROOT sertifikaatti

openssl req -sha256 -x509 -new -nodes -key /etc/ssl/localcerts/rootCA.key -days 3650 -out /etc/ssl/localcerts/rootCA.crt
  • -days = sertifikaatin voimassaoloaika, esimerkissä 10 vuotta
  • -key = tiedosto jossa RSA avain sijaitsee
  • -key rootCA.key RSA avain tiedosto, jonka loit aikaisemmin
  • -out rootCA.crt = sertifikaatti tiedosto

Komento tulostaa ja sinun tulee täyttää tietyt kohdat. Jos sulkeiden [] sisällä vastaa määrittämääsi, voit jättää kentät tyhjäksi.

 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.
 
 ----

Määritä maakoodi:

 Country Name (2 letter code) [FI]: 

Määritä Osavaltio tai provinssi:

 State or Province Name (full name) []: Uusimaa

Määritä sijainti, esimerkiksi kaupunki:

 Locality Name (eg, city) []: Helsinki

Määritä organisaatiosi nimi, esimerkiksi yritys:

 Organization Name (eg, company) [My Company Ltd]:Taistowiki Certificate Authority

Määritä organisaation yksikön nimi:

 Organizational Unit Name (eg, section) []:

Määritä esimerkiksi palvelimesi isäntänimi:

 Common Name (eg, your name or your server's hostname) []:taistowiki.fi

Määritä sähköpostiosoite:

 Email Address []:[email protected]

Nyt ROOT sertifikaatti on luotu ja valmiina käytettäväksi.

Asiakas sertifikaatit

Sinun tulee luoda ROOT sertifikaatti ensin

1. Luodaan RSA avain

 openssl genrsa -des3 -out /etc/ssl/localcerts/ssl.key 2048
  • des3 = salasana suojattu
  • ssl.key = tiedoston nimi
  • 2048 = RSA avaimen pituus

Openssl on bugi jos laittaa alisertifikaateille salasana suojaus ja käyttää wildcard ominaisuutta.

2. Luodaan sertifikaatin allekirjoituspyyntö

 openssl req -new -out ssl.csr -key /etc/ssl/localcerts/ssl.key -config /etc/ssl/openssl.cnf

3. Luodaan sertifikaatti ROOT sertifikaatin alle

 openssl x509 -req -sha256 -in  /etc/ssl/localcerts/ssl.csr -CA /etc/ssl/localcerts/rootCA.crt -CAkey /etc/ssl/localcerts/rootCA.key -CAcreateserial  -out /etc/ssl/localcerts/ssl.crt -days 365 -extensions v3_req -extfile /etc/ssl/openssl.cnf
  • -sha256 = Käytetään SHA256, suositus
  • -days 365 = sertifikaatin voimassaoloaika
  • -extensions v3_req -extfile /etc/ssl/openssl.cnf = Openssl konffi tiedosto, josta haetaan subjectAltName tiedot

Muuta

Bundle sertifikaatti

Esimerkissämme on käytettävä SSL sertifikaatit:

  1. Root CA Certificate - AddTrustExternalCARoot.crt
  2. Intermediate CA Certificate 1 - UTNAddTrustSGCCA.crt
  3. Intermediate CA Certificate 2 - ComodoUTNSGCCA.crt
  4. Intermediate CA Certificate 3 - EssentialSSLCA_2.crt
  5. Your SSL Certificate - yourDomain.crt

jotka pitäisi saada samalle palvelimelle. Bundle Crt mahdollistaa yhteen sertifikaatti tiedostoon useita sertifikaatteja.


Linux:

cat EssentialSSLCA_2.crt ComodoUTNSGCCA.crt UTNAddTrustSGCCA.crt AddTrustExternalCARoot.crt > yourDomain.ca-bundle

Windows:

copy EssentialSSLCA_2.crt + ComodoUTNSGCCA.crt + UTNAddTrustSGCCA.crt + AddTrustExternalCARoot.crt yourDomain.ca-bundle

Sertifikaattien siirto pfx-tiedoston avulla

Openssl sertifikaattia voidaan käyttää myös muillakin webbiservereillä. Voit siirtää mm. IIS:ään pfx tiedoston avulla.

 openssl pkcs12 -export -out ssl.pfx -inkey ssl.key -in ssl.crt -certfile rootCA.crt

Sinun tulee määrittää tiedostoon salasana.


  • -export -out ssl.pfx = PFX tiedosto jonne sertifikaatit laitetaan
  • -inkey ssl.key = RSA avain tiedosto
  • -certfile ssl.crt = Root sertifikaatti

CRT tiedosto konvertointi PEM

Muunto onnistuu helposti komennolla

 openssl x509 -in mycert.crt -out mycert.pem -outform PEM

Decrypt RSA privaattiavain

Decrypt onnistuu helposti seuraavalla komennolla

 openssl rsa -in key.key -out newkey.key

Katso lisää

Apache SSL

Lähteet

http://linux.fi/wiki/OpenSSL

Mainos / Advertisement: