от Rumen(9-08-2004)

рейтинг (35)   [ добре ]  [ зле ]

Printer Friendly Вариант за отпечатване

ЧАСТ 2

Следваща стъпка: Създаване на собствени сертификати

Въпреки, че повечето CAs ще Ви генерират двойка ключове заедно със сертификат с публичен ключ, Вие можете сами да си генерирате двойка ключове и (самоподписани) сертификати. Нека преминем стъпка по стъпка необходимите етапи за да можете след това да поискате доверена (сертификационна организация)CA да подпише Вашият сертификат.

Ключовете и сертификатите, генерирани в тези примери могат да бъдат използвани от всяко приложение, поддържащо стандартите: RSA [3], DSA [4] и X.509 [5]. Въпреки факта, че ще ограничим нашите примерни сценарии до Apache [6], Tomcat [7] servlet [8] контейнер, Вие можете да ползвате тези техники с други приложения, включващи Уеб-услуги ползвайки съответно техните конфигурационни методи.

Два работещи инструмента за работа с ключове/сертификати са: OpenSSL [9] - библиотека от криптографски функции с включени програми от команден ред за тяхното изпълнение; и Keytool [10] - програма за работа с ключове и сертификати, включена като част от JDK [11] (платформа за работа и разработка на езика Java) на Sun.

OpenSSL

Тъй като OpenSSL пакета включва и други функции, като SSL/TLS функции, ние тук ще разгледаме само функциите му за генериране и управление на ключове/сертификати. Следната команда генерира RSA частен ключ от който може да се получи публичен ключ:

openssl genrsa -out private_key.pem 2048

Ако желаете да защитите своя частен ключ с парола (една добра идея) - използвайте един от -des, des3 или -idea ключовете, в зависимост от това кои алгоритъм за криптиране на паролата желаете да използвате. Дължината на ключа (в битове) тук е 2048, което е общоприетия минимум за RSA-ключове.

Ако пък искате да генерирате DSA двойка ключове ето двете стъпки. Първо създайте DSA параметър файл:

openssl dsaparam -out dsa_param.pem 2048

След (приключване на) горната стъпка,може да генерирате и реалния DSA-ключ:

openssl gendsa -out private_key.pem dsa_param.pem

Тъй както и в примера с RSA по-горе, ако искате да защитите своя частен ключ с парола използвайте една от следните опции: -des, -des3 или -idea.

И двата примера по-горе използват PEM като изходен формат, който пакетира Base64 ASN1 [12] DER данни с ASCII заглавия (headers). За да преобразувате PEM-файловете към PKCS#12 [13] формат (за ползване с Tomcat или много други Уеб-браузъри) изпълнете следната команда:

openssl pkcs12 -export -in pem_formatted_file -out pkcs12-formatted-file

Все още не сме приключили. Необходим ни е сертификат с публичен ключ, който да работи със съответният частен ключ. Ще започнем със създаване на подписан от нас (самоподписан) X.509 сертификат:

openssl req -new -x509 -key private_key.pem -out certificate.der

Тази команда интерактивно пита потребителя за нужната информация, относно субекта за който се генерира сертификата (Уеб-сървър или потребител), цялата информация се използва за да се идентифицира субекта на сертификата с публичен ключ; тоест да се прикрепи субект към публичният ключ. Ако генерирате този сертификат само с тестова цел това е достатъчно. Обаче за повечето реални приложения е необходимо сертификата да бъде подписан и от доверен CA. Подробностите по този процес са различни за различните CA, но повечето ще изискат и приемат - Искане за Подпис на Сертификат (CSR). Следната командаЗа ще го генерира:

openssl req -new -key private_key.pem -out certificate_request.csr

Забележете, че тази команда се различава от последната само по липсата на -x509 опцията (която самоподписва сертификата). Резултата от тази команда - CSR вече може да бъде изпратен на CA, ползвайки изисквания за това начин. След като CA е проверила идентичността на субекта (отново тези стъпки са различни за различните CA) CA ще издаде подписан сертификат.

Комбинацията от частен ключ и сертификат с публичен ключ вече може да се използва в PKI-съвместими приложения, т.е. да се активират SSL-връзки с Вашият Tomcat servlet контейнер, както ще видим след малко.

Keytool

Генериране на двойки ключове и управление на сертификати с използване на keytool е малко по-просто от използването на OpenSSL. Например, вместо да трябва да създавате отделно PKCS#12 контейнер за ключове, keytool създава Java Контейнер за Ключове (JKS-Java Key Store), като част от процеса на генериране на двойка ключове/сертификат. От друга страна keytool не предлага приблизително еднаква функционалност в сравнение с OpenSSL. Например, keytool не може да вмъква или извежда частни ключове в/от контейнер за ключове.  Започваме с генериране на RSA двойка ключове (заедно с съответния самоподписан сертификат) използвайки keytool:

keytool -genkey -keyalg RSA -keysize 2048 -keystore my_keystore.jks -alias me

Тази команда ще Ви поиска необходимите за сертификата данни, както в примера с OpenSSL по-горе. Опцията -alias Ви позволява да дадете 'име' (псевдоним) на двойката ключ/сертификат в контейнера за ключове. Ако искате да генерирате DSA двойка ключове, изпълнете следната команда:

keytool -genkey -keyalg DSA -keysize 2048 -keystore my_keystore.jks -alias me

Още веднъж, ако искате само да генерирате тестов сертификат, може да спрете до тук. Ако обаче искате доверен CA да подпише Вашият сертификат е необходимо да генерирате CSR със следната команда:

keytool -certreq -alias me -keystore my_keystore.jks -file certificate_request.csr

Сега вече може да изпратите генерираният CSR-файл на своя CA, използвайки изискваните от тях начини. След приключване на процеса на проверка CA ще издаде подписан сертификат.

Пример с Tomcat

Сега след като сме генерирали нашата двойка ключове (публичен/частен) и имаме издаден от CA сертификат с публичен ключ, който върви с тях, вече сме готови да ги използваме. Нашата първа стъпка е да се убедим, че контейнера за ключове е с правилен формат за ползване от Tomcat. Tomcat версия 5 поддуржа само контейнери с ключове във формати - JKS или PKCS#12. Ако сте използвали OpenSSL за създаване на Вашата двойка ключове и съответно искането за подпис на сертификат то е необходимо да поставите своя частен ключ и съответният му сертификат с публичен ключ заедно в PKCS#12-съвместим контейнер за ключове:

openssl pkcs12 -export -in certificate_file -inkey private_key.pem -chain -name tomcat -outfile my_keystore.p12

Тази команда взема файла, съдържащ сертификата с публичен ключ, издаден от CA (certificate_file) и го сдвоява със съответният частен ключ (private_key.pem) в PKCS#12-съвместим контейнер за ключове, задавайки му псевдоним "tomcat", който се ползване от Tomcatе по-подразбиране.

Ако сте генерирали своята двойка ключ/сертификат, използвайки keytool не е необходимо да променяте нищо - keytool създава JKS-съвместими контейнери за ключове. Убедете се обаче, че след като веднъж сте получили подписан от CA сертификат (в отговор на Вашата CSR-заявка по-горе) трябва да поставите този сертификат в своя контейнер за ключове ето така:

keytool -import -alias tomcat -trustcacerts -file certificate_file -keystore my_keystore.jks

Тази команда сдвоява подписаният от CA сертификат (във файла certificate_file) със съответният частен ключ в контейнера за ключове, създаден преди това и задавайки му псевдонима по подразбиране "tomcat".

Почти приключихме. Ншата последна стъпка е да конфигурираме Tomcat да поддържа SSL-връзка като редактираме $TOMCAT_HOME/conf/server.xml файла, добавяйки следния Connector-елемент:



Това дава на Tomcat възможност да следи за SSL-връзки на порт-443. Забележете също, че ако Вашият контейнер за ключове е PKCS#12-съвместим, то трябва да промените параметъра 'keystoreType'. Също така, ако искате да задължите клиентите също да се идентифицират с валидни сертификати (взаимна идентификация), то променете параметъра 'clientAuth' на 'true'.

Също така е важно да проверите дали 'redirectPort'параметъра за не-SSL връзки е настроен да съвпада с този  на SSL. За повече информация за тази и други сървърни конфигурации на Tomcat вижте тук [14].

След като вече сте редактирали конфигурационния файл на сървъра може да рестартирате Tomcat и да проверите Вашата нова SSL-връзка чрез зареждане на адрес: https://localhost:443 във Вашият браузър.

Това подразбира факта, че Вашият браузър работи на същата машина на която е инсталиран Tomcat. Вие ще видите тематичната страница на Tomcat (или това, което сте конфигурирали за Ваше базово приложение), а също Вашият браузър ще индикира наличието на работеща SSL-връзка.

ВРЪЗКИ:
[1]"another article" - http://www.counterpane.com/pki-risks.html
[2]"two" - http://www.apache-ssl.org/7.5things.txt
[3]"RSA" - http://www.rsasecurity.com/rsalabs/node.asp?id=2125
[4]"DSA" - http://www.itl.nist.gov/fipspubs/fip186.htm
[5]"X.509" - http://www.ietf.org/html.charters/pkix-charter.html
[6]"Apache" - http://www.apache.org/
[7]"Tomcat" - http://jakarta.apache.org/tomcat
[8]"servlet" - http://java.sun.com/products/servlets
[9]"OpenSSL" - http://www.openssl.org/
[10]"Keytool" - http://java.sun.com/j2se/1.4.2/docs/tooldocs/solaris/keytool.html
[11]"Java Development Kit" - http://java.sun.com/
[12]"ASN.1" - http://asn1.elibel.tm.fr/en/standards
[13]"PKCS#12" - http://www.rsasecurity.com/rsalabs/node.asp?id=2138
[14]"this" - http://jakarta.apache.org/tomcat/tomcat-5.0-doc/config/index.html

Приятно четене.


<< lm_sensors + Superkaramba | Сигурни Уеб-услуги: основи на PKI - Част 1 (превод) >>