glisha/02082005001
Дома Друга дома Кајмакот Мапа на Скопје КонтактЗа „УЕБ“Датотеки ГПГ клуч
Изглед:

Наноблог Темен Светол Светол/коцка Хоризонтален
Битни:

Кајмакот - популарни македонски статии.Стандардизирани компјутерски зборови„Уради сам“
2.08.2005 @ 02:07

Задача: Поставување на веб сервер кој сервира криптирани страни и има точно дефинирани клиенти кои мора да се автентицираат со нивните сертификати пред да и пристапат на содржината. Читав на оваа тема неколку текстови па да си ги архивирам во суштина командите на едно место пошто беа раштракани.

Значи целта е да се постави apache со SSL кое на https портот ќе сервира веб апликација. Пристапот се дозволува само ако прелистувачот на корисникот покаже валиден сертификат кој е издаден од нашиот сервер. Во исто време и нашиот сервер ја докажува автентичноста пред клиентот, но сертификатот на серверот го потпишуваме самите а не со некој светски авторитет бидејќи акцентот е клиентите да бидат доверливо автентицирани, а не серверот.

Постапката оди во неколку чекори:

  • Инсталирање на apache и openssl;
  • Генерирање на RSA клуч и сертификат за серверот;
  • Генерирање на RSA клуч и сертификат за корисник;
  • Вметнување на сертификатот во прелистувачот на корисникот;
  • SSL уредби во httpd.conf, каде се наоѓа сертификатот на серверот.

Нема некоја филозофија, инсталирав веќе готов пакет за apache2 и openssl за Slackware. :)

Треба да се генерира приватен клуч за серверот со командата:

openssl genrsa -rand file1:file2:file3 -out sslserver.key 1024

Па генерирам барање за некој да го потпише (сертифицира) мојот клуч:

openssl req -new -key sslserver.key -out sslserver.csr

Бидејќи на корисниците не им е многу гајле дали сум 100% јас серверот доволно добро е сам да го потпишам клучот т.е. сам серверот да си биде авторитет од доверба за автентичноста на клучот. Потпишувањето т.е. издавањето сертификат оди со командата:

openssl x509 -req -days 365 -in sslserver.csr -signkey sslserver.key -out sslserver.crt

Тоа е тоа околу клучевите за серверот, имам sslserver.crt датотека која ми преставува сертификат за автентичност на веб серверот. Подоцна ќе ги ставам потребните линии во httpd.conf

Сега ќе генерирам клуч за еден корисник, ќе го потпишам тој клуч со серверот, ќе генeрирам pkcs12 датотека која потоа се увезува во прелистувачот на корисникот за да може да се идентификува корисникот секој пат кога серверот ќе побара тој да се идентификува.

Генерирам приватен клуч за корисникот и генерирам барање за издавање на сертификат:

openssl genrsa -rand file1:file2:file3 -out korisnik1.key 1024
openssl req -new -key korisnik1.key -out korisnik1.csr

Сега го зимам барањето од корисникот и го потпишувам со клучот на серверот:

openssl x509 -req -days 365 -CA sslserver.crt -CAkey sslserver.key -in korisnik1.csr -out korisnik1.crt

Добив сертификат кој вели дека корисник1 е навистина регистриран со серверот како корисник1. Сега корисникот треба да го спои овој сертификат со својот приватен клуч за на крај да се добие .p12 датотека:

openssl pkcs12 -export -clcerts -in korsinik1.crt -inkey korisnik1.key -out korisnik1.p12

Оваа korisnik1.p12 датотека треба да се увезе во прелистувачот на корисникот за да се издава секој пат кога серверот ќе побара од клиентот да се автентицира. Во Фајрфокс се оди во Преференции->Напредно->Сертификати, па се одбира Уреди ги сертификатите->Внеси.

Сега имам клучеви за серверот и барем за еден корисник и треба да направам виртуелен хост кој ќе ги опслужува веб страните преку SSL.

httpd.conf треба да го има вчитано mod_ssl модулот, плус да има нешто вака:

Listen 443
SSLSessionCache         dbm:/var/run/ssl_scache
SSLSessionCacheTimeout  300
SSLMutex  file:/var/run/ssl_mutex
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl    .crl

VirtualHost *:443
	ServerName  sslserver.com.mk
	DocumentRoot /var/www/htdocs
	SSLEngine on
	# Serveer avtentikacija
	SSLCertificateFile    /etc/apache2/sslserver.crt
	SSLCertificateKeyFile /etc/apache2/sslserver.key
	# Klient avtentikacija
	SSLVerifyClient require
	SSLVerifyDepth 1
	SSLCACertificateFile /etc/apache2/ssl.crt/sslserver.crt
/VirtualHost

Уште треба да се изменат почетните скрипти за стартување на Apache да наместо „apachectl start“, го повикуваат „apachectl startssl“ и му пристапува на сајтот преку https://sslserver.com.mk

Манa е што може да се конфигурира само еден(првиот што ќе го впишам во httpd.conf) Apache NameBasedVirtual хост кој ќе се опслужува од https(443) портата, ако сакам повеќе веб страни треба да ги врзам или по различна IP адреса или на друга порта.

Дополнителна литература: Сервер клучеви, Клиент клучеви и Вовед во SSL.