Să începem cu o mică teorie.
În prezent, protocolul SSL este practic invizibil pentru utilizatorul care interacționează cu alte protocoale de Internet și asigură transferul informațiilor confidențiale prin intermediul rețelelor publice într-o formă criptată. Software-ul OpenSSL suportă protocoale SSL (Secure Sockets Layer) v2 / v3 și TLS v1 (Security Layer Security). Utilitarul liniei de comandă openssl poate fi utilizat pentru a efectua următoarele activități:
- Crearea și gestionarea cheilor RSA și DSA
- Crearea certificatelor în format x509, cereri de semnare certificate, recuperare certificate
- Criptați datele utilizând un algoritm de criptare simetric sau asimetric
- Lucrați cu S / MIME
- Produce ssl / tls testarea serverelor și a clienților
SSL utilizează algoritmi de criptare asimetrici. criptarea cheilor publice. Într-un astfel de algoritm, o cheie este utilizată pentru a decripta datele criptate cu altă cheie. Aceste două chei (private / publice) - o pereche de chei - sunt create simultan, folosind o formulă matematică. Aceasta este singura modalitate de a găsi două chei au asimetrie speciale (în care una dintre cheile pot decripta a doua criptat): calcularea una dintre cheile în al doilea - sarcină extrem de dificilă. Când se utilizează criptarea cheilor publice, o cheie din pereche este disponibilă gratuit, așa-numita. cheia publică și a doua
Certificatul conține o cheie publică semnată de una dintre autoritățile de certificare de încredere rădăcină, informații despre organizația care a emis certificatul și, în unele cazuri, cheia privată criptată, precum și hash-ul (hash-ul) al cheii publice. Certificatele au un timp de acțiune, după care sunt automat considerate nevalabile, ierarhia certificatelor este construită de obicei pe baza rețelei de încredere (există lanțuri destul de lungi de certificate care duc la cheia de încredere de la CA rădăcină).
Creați un certificat root (auto-semnat).
Mai întâi trebuie să puneți openssl (dacă nu este deja instalat) (în momentul în care portul este localizat - / usr / ports / security / openssl).
Creăm foldere (foldere create în '/ usr / local / etc /', dar nu contează).
# cd / usr / local / etc
# mkdir -p CA / newcerts CA / privat<
Dosarul CA va conține certificatul CA, baza de date a certificatelor pe care le-am semnat, precum și cheile, cererile și certificatele pe care le vom genera. Acesta va fi, de asemenea, directorul nostru de lucru atunci când vom crea sau semna certificate.
CA / newcerts - va conține o copie a fiecărui certificat pe care îl vom semna.
CA / private - va conține cheia privată a CA.
Această cheie (cheia privată CA) este foarte importantă. Nu pierdeți această cheie, fără ea, nu veți putea să semnați sau să actualizați certificatele. Nu arătați această cheie nimănui dacă o recunosc, atunci atacatorul vă va putea impresiona.
Creați o bază de date pentru certificate (faceți acest lucru în directorul nostru de lucru "CA"):
# echo '01'> serial
# touch index.txt
Creați openssl.cnf și scrieți-l:
#
# /usr/local/etc/CA/openssl.cnf
#
# Setați directorul de lucru
dir =.
# Această secțiune descrie opțiunile principale
[Req]
# Lungimea cheii în biți
default_bits = 8192
# Algoritmul de criptare
default_md = md5
# Caractere permise
string_mask = nombstr
# Specificați faptul că DN (Nume Distins) va fi descris în secțiunea req_distinguished_name
distinguished_name = req_distinguished_name
# Această secțiune specifică datele care urmează să fie utilizate
# în mod prestabilit la generarea unei cereri de semnare a certificatului
[Req_distinguished_name]
0.organizationName = Numele organizației (companie)
organizationalUnitName = Denumirea unității organizaționale (departament, divizie)
emailAddress = Adresa de e-mail
emailAddress_max = 40
localityName = Localitate Nume (oraș, cartier)
stateOrProvinceName = Numele statului sau provinciei (numele complet)
countryName = Numele țării (cod de 2 litere)
countryName_min = 2
countryName_max = 2
commonName = Nume comun (nume de gazdă, IP sau numele dvs.)
commonName_max = 64
Valori implicite
0.organizareName_default = Unix4Me
localityName_default = Moscova
stateOrProvinceName_default = Rusia
countryName_default = EN
[V3_ca]
basicConstraints = CA: TRUE
subjectKeyIdentifier = hash
authorityKeyIdentifier = cheie: întotdeauna, emitent: întotdeauna
Creați un certificat rădăcină auto-semnat (generic cu o parolă)
# openssl req -new -x509 -extensions v3_ca -keyout privat / rootCA.key -out rootCA.crt -dacă 3650 -config ./openssl.cnf
Generarea unei chei private RSA de 819 biți
. ++
. ++
scrierea unei chei private private în "private / rootCA.key"
Introduceți expresia de trecere PEM:
Verificare - Introduceți expresia de trecere PEM:
-----
Sunteți pe punctul de a fi rugați să introduceți informații care vor fi incluse
în cererea dvs. de certificat.
Care este numele unui Nume Distins sau al unui DN.
Există destul de multe domenii, dar puteți lăsa câteva
Pentru unele câmpuri va exista o valoare implicită,
Dacă introduceți ".", Câmpul va fi lăsat necompletat.
-----
Nume organizație (companie) [Unix4Me]:
Numele unității organizaționale (departament, divizie) []: UnitName
Adresa de e-mail []: [email protected]
Localitate Nume (oraș, cartier) [Moscova]:
Numele sau numele provinciei sau provinciei [numele complet] [Rusia]:
Numele țării (cod de 2 litere) [RU]:
Nume comun (nume de gazdă, IP sau numele dvs.) []: MyName
Când expiră perioada de valabilitate a certificatului rădăcină, toate certificatele semnate devin invalide. Pentru a remedia această situație, trebuie să creați și să distribuiți un nou certificat rădăcină.
Creați o solicitare de semnare a certificatului
Acum, pe baza certificatului rădăcină generat, putem crea orice număr de certificate pentru aplicațiile SSL. Această procedură constă în crearea unei chei și semnare a certificatului Cerere privat, și apoi să-l semneze cu certificatul nostru rădăcină.
Pentru a crea certificate non-root - vom face o schimbare la openssl.cnf (adăugați la sfârșitul fișierului):
[V3_req]
basicConstraints = CA: FALSE
subjectKeyIdentifier = hash
iar în secțiunea [req] după parametrul distinguished_name adăugăm:
req_extensions = v3_req
Creați o solicitare de certificat pentru serverul web. Este necesar să se acorde atenție domeniilor:
# openssl req -new -nodes -out web.unix4me.ru.csr -keyout web.unix4me.ru.key -config ./openssl.cnf
Generarea unei chei private RSA de 819 biți
. ++
. ++
scrierea unei chei private private în "web.unix4me.ru.key"
-----
Sunteți pe punctul de a fi rugați să introduceți informații care vor fi incluse
în cererea dvs. de certificat.
Care este numele unui Nume Distins sau al unui DN.
Există destul de multe domenii, dar puteți lăsa câteva
Pentru unele câmpuri va exista o valoare implicită,
Dacă introduceți ".", Câmpul va fi lăsat necompletat.
-----
Nume organizație (companie) [Unix4Me]:
Numele unității organizaționale (departament, divizie) []: Web Server unix4me.ru
Adresa de e-mail []: [email protected]
Localitate Nume (oraș, cartier) [Moscova]:
Numele sau numele provinciei sau provinciei [numele complet] [Rusia]:
Numele țării (cod de 2 litere) [RU]:
Nume comun (nume gazdă, IP sau numele dvs.) []: unix4me.ru
Ca urmare a acestei comenzi, avem două fișiere:
- web.unix4me.ru.key - cheie privată secretă
- web.unix4me.ru.csr - cererea de semnare a certificatului
Aceste fișiere trebuie salvate. Când certificatul expiră, cererea poate fi utilizată din nou pentru a crea un certificat nou cu o nouă perioadă de valabilitate. O cheie privată este necesară pentru codificarea SSL.
----
Semnătura certificatului
Acum adăugați secțiunea [ca] în fișierul de configurare (openssl.cnf). Această secțiune definește căile spre diferite părți, cum ar fi baza de date, certificatul CA și cheia privată. De asemenea, conține câteva setări de bază. Adăugăm înainte de secțiunea [req]
[Ca]
default_ca = CA_default
[CA_default]
serial = $ dir / serial
baza de date = $ dir / index.txt
new_certs_dir = $ dir / newcerts
certificat = $ dir / rootCA.crt
private_key = $ dir / privat / rootCA.key
default_days = 365
default_md = md5
păstrați = nu
email_in_dn = nu
nameopt = default_ca
certopt = default_ca
policy = policy_match
[Policy_match]
countryName = potrivire
stateOrProvinceName = potrivire
organizațieName = potrivire
organizationalUnitName = opțional
commonName = furnizat
emailAddress = opțional
Pentru a semna solicitarea din etapa anterioară:
# openssl ca -out web.unix4me.ru.crt -config ./openssl.cnf -infiles web.unix4me.ru.csr
Folosind configurația din ./openssl.cnf
Introduceți fraza parolă pentru ./private/rootCA.key:
Verificați dacă cererea corespunde semnăturii
Semnătura ok
Denumirea distinsă a disciplinei este după cum urmează
organizațieName: PRINTABLE: 'Unix4Me'
organizationalUnitName: PRINTABLE: 'Web Server unix4me.ru'
localityName: PRINTABLE: "Moscova"
stateOrProvinceName: PRINTABLE: "Rusia"
countryName: PRINTABLE: "RU"
commonName: PRINTABLE: 'unix4me.ru'
Certificatul trebuie să fie certificat până la 15 aprilie 14:47:22 2022 GMT (3650 zile)
Semnează certificatul? [y / n]: y
1 din 1 cereri de certificat certificate, comite? [y / n] y
Scrieți baza de date cu 1 intrări noi
Baza de date actualizată
Ca urmare, am actualizat baza de date și am obținut două fișiere
- web.unix4me.ru.crt - certificatul în sine
- newcerts /<серийный номер>.pem - copie a certificatului
Dacă utilizați serviciile unor centre de certificare terțe, cum ar fi VeriSign, VISA, Thawte, Baltimore etc. Apoi, va trebui să trimiteți o cerere de semnare a certificatului (web.unix4me.ru.csr) la unul dintre centrele de certificare. După o anumită perioadă de timp, de regulă, 1-3 săptămâni veți primi un certificat gata și semnat (web.unix4me.ru.crt). Care poate fi deja utilizat direct în software. Bineînțeles, acest serviciu este plătit.