Certificat SSL cu Apache + mod_ssl
4 marzo 2008, 12:59 Apache, sistem, Sfaturi şi trucuri 4 martie 2008, 12:59
În acest post transporta peste unele din notele de pe vechiul meu cum de a crea şi a instala un certificat SSL pe un server de web Apache 1.3 .* cu mod_ssl modul. Pentru mai detaliate şi mai cuprinzătoare documentaţie de referinţă care este la http://www.modssl.org/docs este pagina de "om" openssl. O versiune html a acesteia din urmă este de la http://www.openssl.org/docs/.
Utilizarea de instrumente openssl `` puteţi genera o cheie RSA privat, care este asociat cu o mai târziu în materie de RSI (Certificat de semnare cerere). Să vedem cum a privat de a genera cheia RSA şi cum să atribuie serverul Apache. În următorul exemplu se referă la distribuirea FreeBSD 6.0-RELEASE cu Apache 1.3.33, dar este uşor de extins şi la orice altă platformă:
- Primul pas este de a crea RSA cheie privată sau de o cheie de 1024 biţi la RSA, care este criptat folosind un triplu-DES şi stocate într-un fişier. Pem ca text ASCII. Pentru a face mai greu de criptare şi - în consecinţă - mai sigur de cheie, utilizarea unui set de fişiere de seminţe ca aleatoare. Aceasta este toate fişierele care au fost anterior comprimat cu gzip ``:
$ openssl genrsa -des3 -rand file1:file2:file3:file4:file5 -out server.key 1024se va solicita să introduceţi o parolă. Este important de a stoca parola într-un loc sigur: Dacă pentru orice motiv, este pierdut parola, cheia va fi generat complet inutilizabil! Noi nu subestima această recomandare, pentru că o eroare de acest fel poate duce la moderată de plată a unei sume de bani pentru a genera un nou certificat, din cauza pierderii de o cheie privată, Certificat de Autoritatea de la care este adresat (de exemplu: VeriSign), Thawte, etc) de a solicita re-plată a plătit deja pentru certificat mai devreme. Aceasta este o suma în exces - când am scrie - de 400.00 EURO / an! - De când a fost setată o parolă pentru a generat atât de la cheie, pentru fiecare reporniţi Apache va trebui să introduceţi sau - mai bine - Apache pentru a trece printr-un simplu script de bash, care pot fi trase direct în httpd.conf:
SSLPassPhraseDialog exec:/usr/local/etc/apache/password.shde script-ul va fi pur şi simplu ceva asemănător cu următorul text:
#!/bin/sh
echo "password123"#!/bin/shDacă nu doriţi să utilizaţi o parola (nu este recomandat de ales!) Este întotdeauna posibilitatea de a scoate triplu-criptare DES pe cheie. Dacă optaţi pentru o soluţie similară, cel puţin, asiguraţi-vă că cheia este citită doar de root: dacă alţii s-au putut să obţină de decriptat cheie privată, certificatul asociat cu ea va fi ridicată imediat, din motive evidente. Asta a spus, iată cum să eliminaţi cheia de criptare:
echo "password123"
$ openssl rsa -in server.key -out server.pem
Acum, că ne-am privat cheie poate genera în materie de RSI (Certificat de semnare cerere). În materie de RSI pot fi utilizate în două moduri:
- Trimiterea de RSI la un Certificat Autorităţii, aceasta va verifica identitatea solicitantului şi a elibera un certificat semnat
- Utilizarea în materie de RSI de a genera un certificat auto
Suntem aici pentru cea de-a doua ipoteză: în materie de RSI în cazul în care este utilizat pentru a genera un certificat auto, care nu este recunoscută de nici un Certificat de Autoritate. Certificatele de acest fel nu da nici o garanţie de navigator de fiabilitate, dar sunt echivalente din punct de vedere tehnic pentru a asigura reală şi, astfel, securitate maximă în emisie / recepţie de date în cursul călătoriei.
În timpul procesului de creare a RSI va fi solicitat câteva informaţii prin text simplu promptul de comandă. Aceste informaţii vor fi atributele de certificat de X. 509. Cele mai importante de intrare la "Nume comun (de exemplu, numele dumneavoastră)", care trebuie să se potrivească cu FQDN (Numele de domeniu complet definit) pentru server care va fi de conexiune securizată SSL. De comandă pentru a genera de CSR este, după cum urmează:
$ openssl req -new -key server.key -out server.csr făcut, este auto-generatoare de certificatul de comandă:
$ openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt generate de astfel de certificat va fi valabil timp de 10 de ani.
Este numai de luare a rămâne, acum că schimbările de configurare de la server de web Apache. Prima identificate în directorul în care doriţi să mutaţi de certificat, în cazul nostru:
/usr/local/apache/etc/ssl.crt/
/usr/local/apache/etc/ssl.key/
După ce a certificatelor de mutat pentru a modifica fişierul httpd.conf, astfel încât de fiecare dată când începe Apache, setările sunt încărcate pentru gazdă virtuală, care trebuie să răspundă de asemenea, în SSL. Iată un exemplu foarte simplu, care funcţionează pe portul standard de 443:
# SSL Virtual Hosts
<IfDefine SSL>
<VirtualHost _default_:443>
ServerAdmin webmaster@agliardi.net
DocumentRoot /usr/local/apache/share/htdocs
ServerName www.agliardi.net
ScriptAlias /cgi-bin/ /usr/local/apache/share/htdocs/cgi-bin/
SSLEngine on
SSLCertificateFile /usr/local/apache/etc/ssl.crt/server.crt
SSLCertificateKeyFile /usr/local/apache/etc/ssl.key/server.pem
SSLPassPhraseDialog exec:/usr/local/etc/apache/password.sh
SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
CustomLog /usr/local/apache/var/log/ssl_request_log \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>
</IfDefine># SSL Virtual Hosts Aceste instrucţiuni cauza crearea unui gazdă virtuală numit SSL www.agliardi.net şi accesibile pe portul 443, adresa de IP a server de web implicit. Puteţi adăuga cât mai multe SSL gazdă virtuală va fi nevoie, dar trebuie să fie făcut cu atenţie, pentru a specifica un port diferit de fiecare unic unul dintre ei! Cu excepţia cazului în care aveţi la dispoziţie o adresă de IP dedicate pentru fiecare domeniu, care se întâmplă foarte rar.
<IfDefine SSL>
<VirtualHost _default_:443>
ServerAdmin webmaster@agliardi.net
DocumentRoot /usr/local/apache/share/htdocs
ServerName www.agliardi.net
ScriptAlias /cgi-bin/ /usr/local/apache/share/htdocs/cgi-bin/
SSLEngine on
SSLCertificateFile /usr/local/apache/etc/ssl.crt/server.crt
SSLCertificateKeyFile /usr/local/apache/etc/ssl.key/server.pem
SSLPassPhraseDialog exec:/usr/local/etc/apache/password.sh
SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
CustomLog /usr/local/apache/var/log/ssl_request_log \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>
</IfDefine>
Este acum rămâne doar ca şi reporniţi Apache punct de browser-ul dvs. la https: / / www.agliardi.net!
















