от Lucifer

Покрай Hearthbleed и покрай изтичането на някои сертификати за отделни сайтове, които се намират на мой домейн, ми се наложи да седна да генерирам сертификатите за apache на ново. Тъй като не съм един от най-помнещите и докато все още командите се намират в ~/.bash_history реших да седна да напиша това малко ръководство. Много повече за мое собствено удобство, от колкото за нещо друго. Но хей, все някой може да му се наложи да прави нещо такова. Тъй като поддържам няколко сайта и не искам да издавам Self Signed сертификати, работя с едно централно CA (или Certificate authority), което си е мое. Ако използвате външни, платени CA, може да прескочите как се създава CA и да скокнете направо на издаване на ключ и CSR (Certificate Signing Reqest).

1. Local Certificate Autority

Както вече казах, идеята на локалното CA е да можете да издавате повече от един сертификат, който да е подписан от вашето собствено CA. Лично аз поддържам 2 сайта, които имат SSL сертификати – cloud.anavaro.com и https за forum.f-bg.org … и двата сертификата са подписани от Anavaro.com Root CA. Така се удостоверяват сертификатите, подписани от мен. Да започнем със създаването на CA ключове:

openssl genrsa -des3 -out root-ca.key 1024

Тази команда създава двойката ключове, на root (основния) сертификат. Командата ще ви поиска парола, която трябва да потвърдите. Командата създава 1024 битова двойка ключове. Ако ви избие параноята можете да го направите 2048 или 4096. Честно казано е малко вероятно да ви трябва повече от 1024. Всеки който иска да издаде сертификат от името на вашето CA трябва да разполага с този ключ и с паролата. За това е препоръчително да приберете ключа на сигурно място (криптиран контейнер или флашка). Следващата стъпка е да използвате ключа за да подпише самият себе си.

openssl req -new -x509 -days 3650 -key root-ca.key -out root-ca.crt

Като цяло командата се превежда, като „Издай нов x509 самоподписан сертификат за ключовете в root-ca.key, валиден за 10 години (важното е root сертификата да има голям живот) и го запиши във root-ca.crt“. Тук ще ви трябва паролата от предната стъпка. root-ca.crt сертификата, който всички, които ще използват вашите подписани сертификати ще трябва да си инсталират, като trusted authority. За това и живота на този сертификат трябва да е 10 години – за да е валиден по принцип.

2. Сертификати за Apache.

Както казах – аз имам нужда от сертификати за web server – Apache. Като цяло издаването на сертификат става по подобен начин на издаването на CA. Създаваме ключ, после създаваме sign request, след което подписваме request-а. Но да започнем от начало. Първо да създадем key двойката. Аз лично използвам 4096 битов des3 ключ.

openssl genrsa -des3 -out server.key -nodes 4096

Следва създаването на sign reques:

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

След което го подписваме:

openssl ca -cert root-ca.key -out server.pem -infiles server.csr

Резултата е .pem. Личната ми препоръка е да смесите key и pem частите от така подписания сертификат, за да е по лесен мениджмънта.

cat server.key server.pem > server.combined.pem

Копирайте си новия сертификат в директория в която Apache може да чете и сменете правата му на:

chmod 400 /some/apache/dir/server.combined.pem chown apache:apache -R /some/apache/dir

И това е … ако ви се е налагало да настройвате SSL под Apache. Отново казвам, че този материал е много повече за мое собствено удобство от колкото опит да е изчерпателно ръководство за генериране на сертификати. Просто за да не забравя как се прави. Знам, че използването на локално CA създава известни проблем (инсталиране на trusted autority, липса на дървото на сигурност), но това едно решение, ако не нещата които ползвате не са чак толкова обществено значими или нямате достатъчно средства да поддържате сертификата си при валидни CA. Като изключим това, локалното CA ви дава абсолютно всички предимства, които имат и платените сертификати. Използвате всичката сигурност, която се гарантира от OpenSSL като библиотека и https като протокол. След издаването на новите сертификати, единия домейн изкара А+ (като махнем authorty validity теста) на SSLLabs, a другия само А … но ще намеря защо. Надявам се да съм ви бил от ползва … Ваш, Lucifer

Вашият коментар

Вашият имейл адрес няма да бъде публикуван.

 

Този сайт използва Akismet за намаляване на спама. Научете как се обработват данните ви за коментари.