Administrator systemu Linux - Utwórz certyfikaty SSL
Tło TLS i SSL
TLS to nowy standard zabezpieczeń warstwy gniazda, poprzedzający SSL. TLS oferuje lepsze standardy szyfrowania z innymi zabezpieczeniami i funkcjami opakowania protokołu, które poprawiają SSL. Często terminy TLS i SSL są używane zamiennie. Jednak jako profesjonalny administrator CentOS ważne jest, aby zwrócić uwagę na różnice i historię oddzielającą każdy z nich.
SSL przechodzi do wersji 3.0. SSL został opracowany i promowany jako standard branżowy w Netscape. Po zakupie Netscape przez AOL (popularnego w latach 90-tych ISP znanego jako America Online), AOL nigdy tak naprawdę nie promował zmiany potrzebnej do poprawy bezpieczeństwa SSL.
W wersji 3.1 technologia SSL przeszła do standardów systemów otwartych i została zmieniona na TLS . Ponieważ prawa autorskie do SSL nadal należały do AOL, ukuto nowy termin:TLS - Transport Layer Security. Dlatego ważne jest, aby przyznać, że protokół TLS w rzeczywistości różni się od SSL . Zwłaszcza, że starsze technologie SSL mają znane problemy z bezpieczeństwem, a niektóre są dziś uważane za przestarzałe.
Note- W tym samouczku w odniesieniu do technologii 3.1 i nowszych będzie używany termin TLS . Następnie SSL przy komentarzach specyficznych dla technologii SSL 3.0 i starszych.
SSL a TLS Versioning
Poniższa tabela przedstawia powiązania między wersjami TLS i SSL. Słyszałem, jak kilka osób mówiło o SSL w wersji 3.2. Prawdopodobnie jednak zaczerpnęli terminologię z czytania bloga. Jako profesjonalny administrator zawsze chcemy używać standardowej terminologii. Stąd mówienie o SSL powinno odnosić się do dawnych technologii. Proste rzeczy mogą sprawić, że osoba poszukująca pracy w CentOS będzie wyglądać jak doświadczony CS Major.
TLS | SSL |
---|---|
- | 3.0 |
1.0 | 3.1 |
1.1 | 3.2 |
1.2 | 3.3 |
TLS spełnia dwie główne funkcje ważne dla dzisiejszych użytkowników Internetu: po pierwsze, weryfikuje, kto jest stroną, znany jakoauthentication. Po drugie, oferujeend-to-end encryption w warstwie transportowej dla protokołów wyższego poziomu, które nie mają tej natywnej funkcji (ftp, http, protokoły e-mail i inne).
Pierwsza weryfikuje, kto jest stroną i jest ważna dla bezpieczeństwa jako szyfrowanie typu end-to-end. Jeśli konsument ma szyfrowane połączenie ze stroną internetową, która nie jest upoważniona do przyjmowania płatności, dane finansowe są nadal zagrożone. Oto, czego nie będzie mieć każda witryna phishingowa:a properly signed TLS certificate verifying website operators are who they claim to be from a trusted CA.
Istnieją tylko dwie metody obejścia problemu braku odpowiednio podpisanego certyfikatu: oszukanie użytkownika, aby pozwolił przeglądarce internetowej na zaufanie do certyfikatu z podpisem własnym lub nadzieję, że użytkownik nie jest obeznany z technologią i nie będzie wiedział, jak ważny jest zaufany certyfikat Urząd (lub CA).
W tym samouczku będziemy używać tak zwanego certyfikatu z podpisem własnym . Oznacza to, że bez jawnego nadawania temu certyfikatowi statusu zaufanego w każdej przeglądarce internetowej odwiedzającej witrynę, zostanie wyświetlony błąd zniechęcający użytkowników do odwiedzenia witryny. Następnie sprawi, że użytkownik przejdzie przez kilka czynności przed uzyskaniem dostępu do witryny z certyfikatem z podpisem własnym. Pamiętaj, ze względu na bezpieczeństwo to dobra rzecz.
Zainstaluj i skonfiguruj openssl
openssl to standard dla implementacji TLS typu open source. openssl jest używany w systemach takich jak Linux, dystrybucje BSD, OS X, a nawet obsługuje system Windows.
openssl jest ważna, ponieważ zapewnia ochronę warstwy transportowej i oddziela programistom szczegółowe programowanie uwierzytelniania i szyfrowania typu end-to-end . Dlatego openssl jest używany w prawie każdej aplikacji open source używającej protokołu TLS. Jest również instalowany domyślnie w każdej nowoczesnej wersji Linuksa.
Domyślnie openssl powinien być instalowany na CentOS od co najmniej wersji 5. Aby się upewnić, spróbujmy zainstalować openssl przez YUM. Po prostu uruchom instalację, ponieważ YUM jest wystarczająco inteligentny, aby poinformować nas, czy pakiet jest już zainstalowany. Jeśli korzystamy ze starszej wersji CentOS ze względów kompatybilności, wykonanie instalacji yum -y zapewni aktualizację openssl pod kątem częściowo niedawnej luki w zabezpieczeniach typu heart-bleed.
Podczas uruchamiania instalatora okazało się, że w rzeczywistości była aktualizacja openssl .
[root@centos]# yum -y install openssl
Resolving Dependencies
--> Running transaction check
---> Package openssl.x86_64 1:1.0.1e-60.el7 will be updated
---> Package openssl.x86_64 1:1.0.1e-60.el7_3.1 will be an update
--> Processing Dependency: openssl-libs(x86-64) = 1:1.0.1e-60.el7_3.1 for
package: 1:openssl-1.0.1e-60.el7_3.1.x86_64
--> Running transaction check
---> Package openssl-libs.x86_64 1:1.0.1e-60.el7 will be updated
---> Package openssl-libs.x86_64 1:1.0.1e-60.el7_3.1 will be an update
--> Finished Dependency Resolution
Dependencies Resolved
===============================================================================
===============================================================================
Package Arch
Version Repository Size
===============================================================================
===============================================================================
Updating:
openssl x86_64
1:1.0.1e-60.el7_3.1 updates 713 k
Updating for dependencies:
Utwórz certyfikat z podpisem własnym dla OpenLDAP
Jest to metoda tworzenia samopodpisanego pliku dla naszej poprzedniej instalacji OpenLDAP .
Aby utworzyć certyfikat OpenLDAP z podpisem własnym.
openssl req -new -x509 -nodes -out /etc/openldap/certs/myldaplocal.pem -keyout
/etc/openldap/certs/myldaplocal.pem -days 365
[root@centos]# openssl req -new -x509 -nodes -out /etc/openldap/certs/vmnet.pem
-keyout /etc/openldap/certs/vmnet.pem -days 365
Generating a 2048 bit RSA private key
.............................................+++
................................................+++
writing new private key to '/etc/openldap/certs/vmnet.pem'
-----
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.
-----
Country Name (2 letter code) [XX]:US
State or Province Name (full name) []:Califonia
Locality Name (eg, city) [Default City]:LA
Organization Name (eg, company) [Default Company Ltd]:vmnet
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:centos
Email Address []:[email protected]
[root@centos]#
Teraz nasze certyfikaty OpenLDAP powinny być umieszczone w / etc / openldap / certs /
[root@centos]# ls /etc/openldap/certs/*.pem
/etc/openldap/certs/vmnetcert.pem /etc/openldap/certs/vmnetkey.pem
[root@centos]#
Jak widać, certyfikat i klucz są zainstalowane w katalogach / etc / openldap / certs / . Na koniec musimy zmienić uprawnienia do każdego z nich, ponieważ są one obecnie własnością użytkownika root.
[root@centos]# chown -R ldap:ldap /etc/openldap/certs/*.pem
[root@centos]# ls -ld /etc/openldap/certs/*.pem
-rw-r--r--. 1 ldap ldap 1395 Feb 20 10:00 /etc/openldap/certs/vmnetcert.pem
-rw-r--r--. 1 ldap ldap 1704 Feb 20 10:00 /etc/openldap/certs/vmnetkey.pem
[root@centos]#
Utwórz certyfikat z podpisem własnym dla serwera internetowego Apache
W tym samouczku założymy, że Apache jest już zainstalowany. Zainstalowaliśmy Apache w innym samouczku (konfigurowanie CentOS Firewall) i przejdziemy do zaawansowanej instalacji Apache na przyszły samouczek. Jeśli więc jeszcze nie zainstalowałeś Apache, postępuj zgodnie z instrukcjami.
Po zainstalowaniu Apache HTTPd wykonując następujące czynności -
Step 1 - Zainstaluj mod_ssl dla serwera httpd Apache.
Najpierw musimy skonfigurować Apache z mod_ssl. Korzystanie z menedżera pakietów YUM jest dość proste -
[root@centos]# yum -y install mod_ssl
Następnie załaduj ponownie demona Apache, aby upewnić się, że Apache używa nowej konfiguracji.
[root@centos]# systemctl reload httpd
W tym momencie Apache jest skonfigurowany do obsługi połączeń TLS na lokalnym hoście.
Step 2 - Utwórz certyfikat ssl z podpisem własnym.
Najpierw skonfigurujmy nasz prywatny katalog kluczy TLS.
[root@centos]# mkdir /etc/ssl/private
[root@centos]# chmod 700 /etc/ssl/private/
Note- Upewnij się, że tylko root ma dostęp do odczytu / zapisu w tym katalogu. Dzięki światowemu dostępowi do odczytu / zapisu klucza prywatnego można użyć do odszyfrowania podsłuchiwanego ruchu.
Generowanie certyfikatu i plików kluczy.
[root@centos]# sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout
/etc/ssl/private/self-gen-apache.key -out /etc/ssl/certs/self-sign-apache.crt
Generating a 2048 bit RSA private key
..........+++
....+++
-----
Country Name (2 letter code) [XX]:US
State or Province Name (full name) []:xx
Locality Name (eg, city) [Default City]:xxxx
Organization Name (eg, company) [Default Company Ltd]:VMNET
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:centos.vmnet.local
Email Address []:
[root@centos]#
Note - Możesz użyć publicznego adresu IP serwera, jeśli nie masz zarejestrowanej nazwy domeny.
Rzućmy okiem na nasz certyfikat -
[root@centos]# openssl x509 -in self-sign-apache.crt -text -noout
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 17620849408802622302 (0xf489d52d94550b5e)
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=US, ST=UT, L=xxxx, O=VMNET, CN=centos.vmnet.local
Validity
Not Before: Feb 24 07:07:55 2017 GMT
Not After : Feb 24 07:07:55 2018 GMT
Subject: C=US, ST=UT, L=xxxx, O=VMNET, CN=centos.vmnet.local
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
00:c1:74:3e:fc:03:ca:06:95:8d:3a:0b:7e:1a:56:
f3:8d:de:c4:7e:ee:f9:fa:79:82:bf:db:a9:6d:2a:
57:e5:4c:31:83:cf:92:c4:e7:16:57:59:02:9e:38:
47:00:cd:b8:31:b8:34:55:1c:a3:5d:cd:b4:8c:b0:
66:0c:0c:81:8b:7e:65:26:50:9d:b7:ab:78:95:a5:
31:5e:87:81:cd:43:fc:4d:00:47:5e:06:d0:cb:71:
9b:2a:ab:f0:90:ce:81:45:0d:ae:a8:84:80:c5:0e:
79:8a:c1:9b:f4:38:5d:9e:94:4e:3a:3f:bd:cc:89:
e5:96:4a:44:f5:3d:13:20:3d:6a:c6:4d:91:be:aa:
ef:2e:d5:81:ea:82:c6:09:4f:40:74:c1:b1:37:6c:
ff:50:08:dc:c8:f0:67:75:12:ab:cd:8d:3e:7b:59:
e0:83:64:5d:0c:ab:93:e2:1c:78:f0:f4:80:9e:42:
7d:49:57:71:a2:96:c6:b8:44:16:93:6c:62:87:0f:
5c:fe:df:29:89:03:6e:e5:6d:db:0a:65:b2:5e:1d:
c8:07:3d:8a:f0:6c:7f:f3:b9:32:b4:97:f6:71:81:
6b:97:e3:08:bd:d6:f8:19:40:f1:15:7e:f2:fd:a5:
12:24:08:39:fa:b6:cc:69:4e:53:1d:7e:9a:be:4b:
Oto wyjaśnienie każdej opcji, której użyliśmy z poleceniem openssl -
Komenda | Akcja |
---|---|
req -X509 | Użyj standardu PKI zarządzania X.509 CSR do zarządzania kluczami. |
-nodes | Nie zabezpieczaj naszego certyfikatu hasłem. Apache musi mieć możliwość korzystania z certyfikatu bez przerywania hasła. |
-dni 2555 | Informuje o ważności certyfikatu do 7 lat lub 2555 dni. Okres można dostosować w razie potrzeby. |
-newkey rsa: 2048 | Określony w celu generowania klucza i certyfikatu przy użyciu RSA o długości 2048 bitów. |
Następnie chcemy utworzyć grupę Diffie-Heliman do negocjowania PFS z klientami.
[centos#] openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Zajmie to od 5 do 15 minut.
Perfect Forward Secrecy- Służy do zabezpieczania danych sesji w przypadku złamania klucza prywatnego. Spowoduje to wygenerowanie klucza używanego między klientem a serwerem, który jest unikalny dla każdej sesji.
Teraz dodaj konfigurację Perfect Forward Secrecy do naszego certyfikatu.
[root@centos]# cat /etc/ssl/certs/dhparam.pem | tee -a /etc/ssl/certs/self-sign-apache.crt
Skonfiguruj Apache do używania plików kluczy i certyfikatów
Będziemy wprowadzać zmiany w /etc/httpd/conf.d/ssl.conf -
Wprowadzimy następujące zmiany w ssl.conf . Jednak zanim to zrobimy, powinniśmy wykonać kopię zapasową oryginalnego pliku. Podczas wprowadzania zmian na serwerze produkcyjnym w zaawansowanym edytorze tekstu, takim jak vi lub emcas , najlepiej jest zawsze wykonać kopię zapasową plików konfiguracyjnych przed wprowadzeniem zmian.
[root@centos]# cp /etc/httpd/conf.d/ssl.conf ~/
Kontynuujmy teraz nasze zmiany po skopiowaniu znanej działającej kopii ssl.conf do katalogu głównego naszego folderu domowego.
- Locate
- Edytuj zarówno DocumentRoot, jak i ServerName w następujący sposób.
\\# General setup for the virtual host, inherited from global configuration
DocumentRoot "/var/www/html"
ServerName centos.vmnet.local:443
DocumentRootto jest ścieżka do twojego domyślnego katalogu Apache. W tym folderze powinna znajdować się strona domyślna, która wyświetli żądanie HTTP z pytaniem o domyślną stronę serwera WWW lub witryny.
ServerNameto nazwa serwera, która może być adresem IP lub nazwą hosta serwera. W przypadku protokołu TLS najlepszym rozwiązaniem jest utworzenie certyfikatu z nazwą hosta. Na podstawie naszego samouczka OpenLdap utworzyliśmy nazwę hosta centos w lokalnej domenie przedsiębiorstwa: vmnet.local
Teraz chcemy skomentować następujące linie.
SSLProtocol
# SSL Protocol support:
# List the enable protocol levels with which clients will be able to
# connect. Disable SSLv2 access by default:
~~~~> #SSLProtocol all -SSLv2
# SSL Cipher Suite:
# List the ciphers that the client is permitted to negotiate.
# See the mod_ssl documentation for a complete list.
~~~~> #SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA
Następnie poinformuj Apache, gdzie znaleźć nasz certyfikat i parę kluczy prywatny / publiczny.
Określ ścieżkę do naszego pliku certyfikatu z podpisem własnym
# Server Certificate:
# Point SSLCertificateFile at a PEM encoded certificate. If
# the certificate is encrypted, then you will be prompted for a
# pass phrase. Note that a kill -HUP will prompt again. A new
# certificate can be generated using the genkey(1) command.
~~~~> SSLCertificateFile /etc/ssl/certs/self-sign-apache.crt
specify path to our private key file
# Server Private Key:
# If the key is not combined with the certificate, use this
# directive to point at the key file. Keep in mind that if
# you've both a RSA and a DSA private key you can configure
# both in parallel (to also allow the use of DSA ciphers, etc.)
~~~~> SSLCertificateKeyFile /etc/ssl/private/self-gen-apache.key
Wreszcie, musimy zezwolić na połączenia przychodzące do https przez port 443.