Önaláírt tanúsítványok (openssl)

Önaláírt tanúsítványok (openssl)

Kezdjük egy kis elmélettel.

Jelenleg az SSL protokoll gyakorlatilag láthatatlan ahhoz, hogy a felhasználó más internetes protokollokkal kölcsönhatásba lépjen, és titkosított formában biztosítja a bizalmas információk nyilvános hálózatokon keresztüli átvitelét. Az OpenSSL szoftver támogatja az SSL (Secure Sockets Layer) v2 / v3 és TLS v1 (Transport Layer Security) protokollokat. Az openssl parancssori segédprogram a következő feladatok elvégzésére használható:

  • RSA és DSA kulcsok létrehozása és kezelése
  • X509 formátumú tanúsítványok, tanúsítvány aláírási kérelmek, tanúsítvány-helyreállítás
  • Az adatok titkosítása szimmetrikus vagy aszimmetrikus titkosítási algoritmus alkalmazásával
  • Munka az S / MIME programmal
  • Szerverek és ügyfelek ssl / tls tesztelésének létrehozása

Az SSL aszimmetrikus titkosítási algoritmusokat használ. nyilvános kulcs titkosítás. Ilyen algoritmusban egy kulcsot használnak egy másik kulcsmal titkosított adat dekódolására. Ez a két kulcs (magán / nyilvános) - egy pár kulcs - egyszerre hozható létre, matematikai képlet segítségével. Ez az egyetlen módja, hogy megtalálják két kulcs speciális aszimmetria (ahol az egyik kulcsa lehet a titkosított másodperc): kiszámítjuk az egyik kulcs, a második - a feladat rendkívül nehéz. Nyilvános kulcs titkosítása esetén a párok egyik gombja szabadon elérhető, úgynevezett. a nyilvános kulcs, a második

A tanúsítvány tartalmaz egy nyilvános kulcsot, amelyet az egyik gyökér megbízható tanúsító hatóság ír alá, a tanúsítványt kiadó szervezetről, és egyes esetekben a titkosított titkos kulcsról, valamint a nyilvános kulcs hash-ról (hash). A tanúsítványok cselekvési idővel rendelkeznek, amely után automatikusan érvénytelennek minősülnek, a tanúsítványok hierarchiája rendszerint a bizalmi hálózat alapján épül fel (a gyökértényezőtől a megbízható kulcshoz vezető elég hosszú tanúsítványláncok vannak).

Hozzon létre egy gyökér (önaláírt) tanúsítványt.

Először fel kell tenned (ha még nincs telepítve) openssl (a port helyén - / usr / ports / security / openssl).
Készítünk mappákat (létrehozott mappákat a '/ usr / local / etc /' könyvtárban, de ez nem számít).
# cd / usr / local / etc
# mkdir -p CA / newcerts CA / privát<
A CA mappa tartalmazza CA tanúsítványunkat, az általunk aláírt tanúsítványok adatbázisát, valamint a létrehozni kívánt kulcsokat, kéréseket és tanúsítványokat. Ez lesz a munkakönyvtárunk, amikor létrehozunk vagy aláírjuk a tanúsítványokat.
CA / newcerts - minden egyes tanúsítvány másolatát tartalmazza, amelyet aláírunk.
CA / private - tartalmazza a CA privát kulcsot.

Ez a kulcs (CA privát kulcs) nagyon fontos. Ne hagyja el ezt a kulcsot, anélkül, hogy nem tudná aláírni vagy frissíteni a tanúsítványokat. Ne jelenítse meg ezt a kulcsot bárkinek, ha felismeri, akkor a támadó képes lesz megszemélyesíteni.

Hozzon létre egy adatbázist a tanúsítványokhoz (tegye ezt a "CA" munkakönyvtárunkban):
# echo '01'> soros
# touch index.txt
Hozzon létre openssl.cnf fájlt, és írja hozzá:
#
# /usr/local/etc/CA/openssl.cnf
#

# Állítsa be a munkakönyvtárat
dir =.

# Ez a rész a főbb opciókat ismerteti
[Req]

# Kulcshossz bitekben
default_bits = 8192

# Titkosítási algoritmus
default_md = md5

# Engedélyezett karakterek
string_mask = nombstr

# Adja meg, hogy a DN (Distinguished Name) leírása a req_distingu_name részben található
distinguished_name = req_distinguished_name

# Ez a szakasz adja meg a használni kívánt adatokat
# alapértelmezés szerint tanúsítvány-aláírási kérelem generálásakor
[Req_distinguished_name]
0.organizationName = Szervezet neve (cég)
organizationalUnitName = Szervezeti egység neve (osztály, részleg)
emailAddress = E-mail cím
emailAddress_max = 40
localityName = Helység Név (város, körzet)
stateOrProvinceName = Állam vagy tartománynév (teljes név)
countryName = Országnév (2 betűs kód)
countryName_min = 2
countryName_max = 2
commonName = Közönséges név (hostname, IP, vagy a neved)
commonName_max = 64

# Alapértelmezett értékek
0.organizationName_default = Unix4Me
localityName_default = Moszkva
stateOrProvinceName_default = Oroszország
countryName_default = EN

[V3_ca]
basicConstraints = CA: TRUE
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid: mindig, kibocsátó: mindig

Hozzon létre egy önaláírt tanúsítványt (generikus jelszóval)
# openssl req -new -x509 -extensions v3_ca -keyout privát / rootCA.key -out rootCA.crt -nap 3650 -config ./openssl.cnf
8192 bit RSA privát kulcs létrehozása
. ++
. ++
új magánkulcs írása a "private / rootCA.key"
Adja meg a PEM jelszót:
Ellenőrzés - Adja meg a PEM jelzést:
-----
Arra fogják kérni, hogy adja meg a beillesztendő információkat
a tanúsítványkérelmére.
Mi a neve egy Megkülönböztető névnek vagy egy DN-nek?
Van néhány területen, de hagyhatsz néhányat
Egyes mezők esetén alapértelmezett érték lesz,
Ha megadja a '.' Mezőt, akkor a mező üresen marad.
-----
Szervezet neve (cég) [Unix4Me]:
Szervezeti egység neve (részleg, osztály) []: UnitName
E-mail cím []: [email protected]
Helység Név (város, kerület) [Moszkva]:
Állam vagy tartomány neve (teljes név) [Oroszország]:
Országnév (2 betűs kód) [RU]:
Közönséges név (hostname, IP vagy név) []: MyName

Ha a gyökértanúsítvány érvényességi ideje lejár, minden aláírt tanúsítvány érvénytelenné válik. A helyzet javításához létre kell hoznia és terjesztenie kell egy új gyökértanúsítványt.

Tanúsítvány aláírási kérvény létrehozása

Most, a létrehozott gyökértanúsítvány alapján, létrehozhatunk számos tanúsítványt az SSL alkalmazásokhoz. Ez az eljárás magántulajdonú kulcs létrehozását és a tanúsítvány aláírásának kérelmezését tartalmazza, majd aláírja a gyökér-tanúsítványunkkal.
Nem root-tanúsítványok létrehozása - módosítjuk az openssl.cnf fájlt (hozzáadjuk a fájl végéig):
[V3_req]
basicConstraints = CA: FALSE
subjectKeyIdentifier = hash
és a [req] szakaszban a distinguished_name paraméter után adunk hozzá:
req_extensions = v3_req
Hozzon létre tanúsítványkérelmet a webszerver számára. Figyelembe kell venni a következő területeket:

# openssl req -new -nodes -out web.unix4me.ru.csr -keyout web.unix4me.ru.key -config ./openssl.cnf
8192 bit RSA privát kulcs létrehozása
. ++
. ++
új magánkulcs írása a 'web.unix4me.ru.key'
-----
Arra fogják kérni, hogy adja meg a beillesztendő információkat
a tanúsítványkérelmére.
Mi a neve egy Megkülönböztető névnek vagy egy DN-nek?
Van néhány területen, de hagyhatsz néhányat
Egyes mezők esetén alapértelmezett érték lesz,
Ha megadja a '.' Mezőt, akkor a mező üresen marad.
-----
Szervezet neve (cég) [Unix4Me]:
Szervezeti egység neve (osztály, részleg) []: webszerver unix4me.ru
E-mail cím []: [email protected]
Helység Név (város, kerület) [Moszkva]:
Állam vagy tartomány neve (teljes név) [Oroszország]:
Országnév (2 betűs kód) [RU]:
Közös név (gazdanév, IP vagy név) []: unix4me.ru
Ennek a parancsnak köszönhetően két fájlt kaptunk:

  • web.unix4me.ru.key - titkos magánkulcs
  • web.unix4me.ru.csr - tanúsítvány aláírási kérelem

Ezeket a fájlokat menteni kell. A tanúsítvány lejáratakor a kérelem újra felhasználható új tanúsítvány létrehozására, új érvényességi idővel. Az SSL kódolásához egy privát kulcs szükséges.
----

Tanúsítvány aláírás

Adja hozzá a [ca] szekciót a konfigurációs fájlhoz (openssl.cnf). Ez a szakasz meghatározza a különböző részek elérési útvonalát, például az adatbázisot, a CA-tanúsítványt és a privát kulcsot. Tartalmaz néhány alapvető beállítást is. Hozzáadjuk a [req]
[Ca]
default_ca = CA_default

[CA_default]
soros = $ dir / soros
adatbázis = $ dir / index.txt
new_certs_dir = $ dir / newcerts
certificate = $ dir / rootCA.crt
private_key = $ dir / private / rootCA.key
default_days = 365
default_md = md5
megőrzés = nincs
email_in_dn = nem
nameopt = default_ca
certopt = default_ca
policy = policy_match

[Policy_match]
countryName = mérkőzés
stateOrProvinceName = mérkőzés
organizationName = mérkőzés
szervezetiUnitName = opcionális
commonName = mellékelve
emailAddress = opcionális
Az előző lépéshez tartozó kérelem aláírása:
# Openssl ca kijelentkezés web.unix4me.ru.crt -config ./openssl.cnf -infiles web.unix4me.ru.csr
A ./openssl.cnf konfiguráció használatával
Adja meg a ./private/rootCA.key jelszavát:
Ellenőrizze, hogy a kérés megfelel-e az aláírásnak
Aláírás rendben
A Tárgy megkülönböztetett neve a következő
szervezetName: PRINTABLE: 'Unix4Me'
organizationalUnitName: PRINTABLE: 'webszerver unix4me.ru'
localityName: PRINTABLE: "Moszkva"
stateOrProvinceName: PRINTABLE: "Oroszország"
országName: PRINTABLE: "RU"
commonName: PRINTABLE: 'unix4me.ru'
A tanúsítványt 2012. április 15-ig igazolják. 14:47:22 2022 GMT (3650 nap)
Aláírja a tanúsítványt? [y / n]: y

1-ből 1 tanúsítványkérelmek hitelesítettek, elkötelezzék? [y / n] y
Írj ki adatbázisot 1 új bejegyzéssel
Adatbázis frissítve
Ennek eredményeként naprakésszünk az adatbázisunkon, és két fájlt kaptunk

  • web.unix4me.ru.crt - maga a tanúsítvány
  • newcerts /<серийный номер>.pem - a tanúsítvány másolata

Ha külső hitelesítő központok, például VeriSign, VISA, Thawte, Baltimore, stb. Szolgáltatásait használja Ezután be kell jelentkeznie a tanúsítvány aláírására (web.unix4me.ru.csr) az egyik tanúsító központba. Egy idő után, általában 1-3 hétig kész és aláírt tanúsítványt (web.unix4me.ru.crt) küldünk. Amely már közvetlenül használható a szoftverben. Természetesen ezt a szolgáltatást fizetik.

Hasznos parancsok.