Створення і використання сертифікатів SSL

Створення і використання сертифікатів SSL

У цьому документі описується, як налаштувати самостійно сертифікацію кореневого центру (коренева ЦС – центр сертифікації), використовуючи набір інструментів OpenSSL. Як кореневий центр сертифікації, ви можете підписати і встановити сертифікати для використання в ваших додатках інтернет-сервера, такі як Apache і Stunnel.

Зміст

Сфера застосування

Цей документ охоплює дуже специфічну, обмежену мету, але ту, яка відповідає загальній потребі: захист браузера, пошти та інших клієнтів, які скаржаться на сертифікати, встановлені на вашому сервері.

Що не охоплено, так це як справлятися з комерційним центром кореневої сертифікації (ЦС). Замість цього ми станемо нашим власним кореневим центром сертифікації і підписуватимемо свої власні сертифікати.

Ці процедури були розроблені з використанням OpenSSL 0.9.6 24 вересня 2000 на Linux.

Назад вгору

Швидкий старт

Тим, хто хоче почати створювати сертифікати відразу, не читаючи весь цей документ, слід перейти до резюме в кінці.

Назад вгору

Підготовка

Навіщо нам наш власний кореневий ЦС? Щоб ми могли скористатися шифруванням SSL, не витрачаючи гроші на те, щоб хтось інший підписував наші сертифікати.

Недолік полягає в тому, що браузери як і раніше скаржаться на наш сайт як на неперевірений, поки наш кореневий сертифікат не імпортується. Однак, як тільки це буде зроблено, ми не відрізнятимемось від комерційних кореневих центрів сертифікації.

Клієнти будуть імпортувати тільки наш кореневий сертифікат, якщо вони довіряють нам. Ось де комерційні центрив сертифікації починають діяти: вони покликані робити великі дослідження серед людей і організацій, для яких вони підписують сертифікати. Шляхом імпорту (насправді, за допомогою виробників браузерів) їх довірених кореневих сертифікатів, ми говоримо, що ми довіряємо їм, коли вони гарантують, що хтось, про кого вони говорять, дійсно є ним. Ми можемо довіряти додатковим кореневим центрам сертифікації (таким як і ми), імпортувавши їх сертифікати ЦС.

Примітка: Якщо ви знаходитесь в бізнесі ведення комерційного захищеного сайту, отримання комерційно підписаного сертифіката є єдиним реальним вибором.

Назад вгору

Передумови

Вам буде потрібно встановити копію OpenSSL для цього, яка доступна тут http://www.openssl.org. Швидше за все, вона вже встановлена на вашому комп'ютері. Цей документ не буде охоплювати процедуру установки.

Назад вгору

Початкове налаштування

По-перше, ми створимо каталог, де ми можемо працювати. Не має значення, де він; Я без якоїсь конкретної причини збираюся створити його в моєму домашньому каталозі.

# mkdir CA
# cd CA
# mkdir newcerts private

 

Каталог CA міститиме:

  • Наш сертифікат центру сертифікації (ЦС)
  • База даних сертифікатів, які ми підписали
  • Ключі, запити та сертифікати, які ми генеруємо

Він також буде нашим робочим каталогом при створенні або підписанні сертифікатів.

Каталог CA / newcerts буде містити:

  • Копію кожного сертифіката, який ми підписуємо

Каталог CA/private буде містити:

  • Наш приватний ключ ЦА

Цей ключ має важливе значення:

  • Не загубіть цей ключ. Без нього ви не зможете підписати або оновити будь-які сертифікати.
  • Не повідомляйте цей ключ будь-кому. Якщо він зламаний, інші будуть мати можливість видавати себе за вас.

Наш наступний крок полягає в створенні бази даних для сертифікатів, які ми підпишемо:

# echo '01' >serial
# touch index.txt

 

Замість того, щоб використовувати конфігураційний файл, який поставляється з OpenSSL, ми збираємося створити мінімальну конфігурацію наших власних в цьому каталозі. Запустіть редактор (vi, pico, ...) і створіть основний openssl.cnf:

---Begin---
#
# OpenSSL configuration file.
#

# Establish working directory.

dir			= .

----End----
 

Назад вгору

Створення кореневого сертифіката

З OpenSSL, велика частина того, що йде в сертифікат, залежить від вмісту файлу конфігурації, а не в командному рядку. Це хороша річ, тому що є багато того, що треба уточнити.

Файл конфігурації розділений на секції, які вибірково читаються і обробляються відповідно до аргументів командного рядка OpenSSL. Розділи можуть включати один або кілька інших розділів, посилаючись на них, що допомагає зробити файл конфігурації більш модульним. Ім'я в квадратних дужках (наприклад "[ req ]") починає кожен розділ.

Тепер нам потрібно додати розділ, який контролює, як створюються сертифікати, а також розділ, щоб визначити тип сертифіката для створення.

Перше, що нам потрібно вказати, це Унікальне ім'я. Це текст, який ідентифікує власника сертифіката при перегляді. Він безпосередньо не згадується в файлі конфігурації, але включається в розділ, який знаходиться в роботі при створенні запиту сертифіката. Команда звучить як "openssl req <args>", тому секція називається [ req ].

І далі за openssl.cnf:

---Begin---

[ req ]
default_bits		= 1024			# Size of keys
default_keyfile		= key.pem		# name of generated keys
default_md		= md5			# message digest algorithm
string_mask		= nombstr		# permitted characters
distinguished_name	= req_distinguished_name

[ req_distinguished_name ]
# Variable name		  Prompt string
#----------------------	  ----------------------------------
0.organizationName	= Organization Name (company)
organizationalUnitName	= Organizational Unit Name (department, division)
emailAddress		= Email Address
emailAddress_max	= 40
localityName		= Locality Name (city, district)
stateOrProvinceName	= State or Province Name (full name)
countryName		= Country Name (2 letter code)
countryName_min		= 2
countryName_max		= 2
commonName		= Common Name (hostname, IP, or your name)
commonName_max		= 64

# Default values for the above, for consistency and less typing.
# Variable name			  Value
#------------------------------	  ------------------------------
0.organizationName_default	= The Sample Company
localityName_default		= Metropolis
stateOrProvinceName_default	= New York
countryName_default		= US

[ v3_ca ]
basicConstraints	= CA:TRUE
subjectKeyIdentifier	= hash
authorityKeyIdentifier	= keyid:always,issuer:always

----End----

 

Для того, щоб захистити себе від несанкціонованого використання нашого сертифіката ЦС, він має бути захищений ключовою фразою. Кожен раз, коли ви використовуєте сертифікат ЦС для підписання запиту, вам буде запропоновано ввести ключову фразу. Тепер було б добре вибрати безпечну ключову фразу і помістити її в безпечне місце.

Всі приготування на даний момент в одному місці і ми готові до створення нашого самопідписаного кореневого сертифіката. Для цього ми хочемо перевизначити деякі значення за замовчуванням, які ми щойно помістили в конфігурацію, тому ми визначимо їх в командному рядку.

Нашу перевизначення для команди "openssl req":

  • Створити новий самопідписаний сертифікат: -new -x509
  • Створення сертифіката ЦС: -extensions v3_ca
  • Переконайтеся, що він діє протягом більш ніж 30 днів: -days 3650
  • Запишіть вихід в певні місця: -keyout, -out
  • Використовуйте наш файл конфігурації: -config ./openssl.cnf

(Зауваження про термін дії кореневих сертифікатів: Після закінчення терміну дії кореневого сертифікату, всі сертифікати, підписані з ним, більше не дійсні. Щоб виправити цю ситуацію, новий кореневий сертифікат повинен бути створений і поширений. Крім того, разом з ним повинні бути скасовані всі підписані сертифікати з вичерпаним терміном, а потім повторно підписані з новим. Так як це може бути багато роботи, ви захочете зробити ваш кореневий сертифікат дійсним до тих пір, до яких, вам здається, що він буде потрібен. У такому випадку, ми робимо його дійсним протягом десяти років.)

Виконайте команду, як показано на малюнку. У цьому випадку, ключова фраза PEM, яку він просить, - це нова, її необхідно ввести два рази:

 

# openssl req -new -x509 -extensions v3_ca -keyout private/cakey.pem \
-out cacert.pem -days 3650 -config ./openssl.cnf
Using configuration from ./openssl.cnf
Generating a 1024 bit RSA private key
.......++++++
..........................++++++
writing new private key to 'private/cakey.pem'
Enter PEM pass phrase:demo
Verifying password - Enter PEM pass phrase:demo
-----
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.
-----
Organization Name (company) [The Sample Company]:<enter>
Organizational Unit Name (department, division) []:CA Division
Email Address []:ca@sample.com
Locality Name (city, district) [Metropolis]:<enter>
State or Province Name (full name) [New York]:<enter>
Country Name (2 letter code) [US]:<enter>
Common Name (hostname, IP, or your name) []:TSC Root CA

 

Цей процес створює два файли в якості вихідних:

  • Приватний ключ в private/cakey.pem
  • Кореневий сертифікат ЦС в cacert.pem

cacert.pem це файл, який ви хочете поширювати серед своїх клієнтів.

Приватний ключ (cakey.pem) виглядає так:

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,0947F49BB28FE5F4

jlQvt9WdR9Vpg3WQT5+C3HU17bUOwvhp/r0+viMcBUCRW85UqI2BJJKTi1IwQQ4c
tyTrhYJYOP+A6JXt5BzDzZy/B7tjEMDBosPiwH2m4MaP+6wTbi1qR1pFDL3fXYDr
ZsuN08dkbw9ML6LOX5Rl6bIBL3i5hnGiqm338Fl52gNstThv0C/OZhXT3B4qsJn8
qZb3mC6U2nRaP/NpZPcEx4lv2vH7OzHTu1TZ7t0asSpgpuH58dfHPw775kZDep2F
LXA3Oeavg0TLFHkaFBUx2xaeEG6Txpt9I74aAsw1T6UbTSjqgtsK0PHdjPNfPGlY
5U3Do1pnU9hfoem/4RAOe0cCovP/xf6YPBraSFPs4XFfnWwgEtL09ReFqO9T0aSp
5ajLyBOYOBKQ3PCSu1HQDw/OzphInhKxdYg81WBBEfELzSdMFQZgmfGrt5DyyWmq
TADwWtGVvO3pEhO1STmCaNqZQSpSwEGPGo5RFkyFvyvyozWX2SZg4g1o1X40qSg9
0FMHTEB5HQebEkKBoRQMCJN/uyKXTLjNB7ibtVbZmfjsi9oNd3NJNVQQH+o9I/rP
wtFsjs+t7SKrsFB2cxZQdDlFzD6EBA+5ytebGEI1lJHcOUEa6P+LTphlwh/o1QuN
IKX2YKHA4ePrBzdgZ+xZuSLn/Qtjg/eZv6i73VXoHk8EdxfOk5xkJ+DnsNmyx0vq
W53+O05j5xsxzDJfWr1lqBlFF/OkIYCPcyK1iLs4GOwe/V0udDNwr2Uw90tefr3q
X1OZ9Dix+U0u6xXTZTETJ5dF3hV6GF7hP3Tmj9/UQdBwBzr+D8YWzQ==
-----END RSA PRIVATE KEY-----

 

Звичайно, ви не хочете показати його кому-небудь! Само собою зрозуміло, показаний тут ключ тепер марний в якості секретного ключа.

Сертифікат (cacert.pem) виглядає наступним чином:

-----BEGIN CERTIFICATE-----
MIIDrTCCAxagAwIBAgIBADANBgkqhkiG9w0BAQQFADCBnDEbMBkGA1UEChMSVGhl
IFNhbXBsZSBDb21wYW55MRQwEgYDVQQLEwtDQSBEaXZpc2lvbjEcMBoGCSqGSIb3
DQEJARYNY2FAc2FtcGxlLmNvbTETMBEGA1UEBxMKTWV0cm9wb2xpczERMA8GA1UE
CBMITmV3IFlvcmsxCzAJBgNVBAYTAlVTMRQwEgYDVQQDEwtUU0MgUm9vdCBDQTAe
Fw0wMTEyMDgwNDI3MDVaFw0wMjEyMDgwNDI3MDVaMIGcMRswGQYDVQQKExJUaGUg
U2FtcGxlIENvbXBhbnkxFDASBgNVBAsTC0NBIERpdmlzaW9uMRwwGgYJKoZIhvcN
AQkBFg1jYUBzYW1wbGUuY29tMRMwEQYDVQQHEwpNZXRyb3BvbGlzMREwDwYDVQQI
EwhOZXcgWW9yazELMAkGA1UEBhMCVVMxFDASBgNVBAMTC1RTQyBSb290IENBMIGf
MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDaiAwfKB6ZBtnTRTIo6ddomt0S9ec0
NcuvtJogt0s9dXpHowh98FCDjnLtCi8du6LDTZluhlOtTFARPlV/LVnpsbyMCXMs
G2qpdjJop+XIBdvoCz2HpGXjUmym8WLqt+coWwJqUSwiEba74JG93v7TU+Xcvc00
5MWnxmKZzD/R3QIDAQABo4H8MIH5MAwGA1UdEwQFMAMBAf8wHQYDVR0OBBYEFG/v
yytrBtEquMX2dreysix/MlPMMIHJBgNVHSMEgcEwgb6AFG/vyytrBtEquMX2drey
six/MlPMoYGipIGfMIGcMRswGQYDVQQKExJUaGUgU2FtcGxlIENvbXBhbnkxFDAS
BgNVBAsTC0NBIERpdmlzaW9uMRwwGgYJKoZIhvcNAQkBFg1jYUBzYW1wbGUuY29t
MRMwEQYDVQQHEwpNZXRyb3BvbGlzMREwDwYDVQQIEwhOZXcgWW9yazELMAkGA1UE
BhMCVVMxFDASBgNVBAMTC1RTQyBSb290IENBggEAMA0GCSqGSIb3DQEBBAUAA4GB
ABclymJfsPOUazNQO8aIaxwVbXWS+8AFEkMMRx6O68ICAMubQBvs8Buz3ALXhqYe
FS5G13pW2ZnAlSdTkSTKkE5wGZ1RYSfyiEKXb+uOKhDN9LnajDzaMPkNDU2NDXDz
SqHk9ZiE1boQaMzjNLu+KabTLpmL9uXvFA/i+gdenFHv
-----END CERTIFICATE-----

 

Ми можемо запросити зміст цього сертифіката з OpenSSL, щоб дізнатися, кому належить те, що воно з себе уявляє і т.д.:

 


# openssl x509 -in cacert.pem -noout -text
# openssl x509 -in cacert.pem -noout -dates
# openssl x509 -in cacert.pem -noout -purpose

 

Назад вгору

Створення запиту на підпис сертифіката (CSR)

Тепер, коли у нас є кореневий сертифікат, ми можемо створити будь-яку кількість сертифікатів для установки в наших SSL додатках, таких як https, spop або simap. Процедура включає в себе створення запиту закритого ключа, а потім підписання запиту для створення сертифіката.

Наш конфігураційний файл потребує ще кілька визначень для створення сертифікатів не-ЦС. Додайте наступний рядок в кінці файлу:

---Begin---
[ v3_req ]
basicConstraints	= CA:FALSE
subjectKeyIdentifier	= hash

----End----

 

Щоб уникнути постійного додавання цього в командний рядок, вставте наступний рядок в секцію [ req ] після рядка distinguished_name як показано нижче:

 

---Begin---
distinguished_name	= req_distinguished_name
req_extensions		= v3_req

----End----

 

Тепер ми готові створити наш перший запит сертифіката. В цьому прикладі ми збираємось створити сертифікат для сервера безпеки POP на mail.sample.com. все так само, як коли ми створювали сертифікат ЦС, але три витікаючі звідси підказки отримують різні відповіді.

  • Організаційний урок: нагадування про те, навіщо взагалі сертифікат
  • Email-адреса: наглядач
  • Спільне ім’я: ім'я хоста сервера

Загальне ім'я повинно бути (або IP-адреса має постановити) іменем сервера, яке ваші клієнти будуть використовувати, щоб зв'язатися з вашим хостом. Якщо воно не співпадає, кожен раз, коли вони підключаються, ваші клієнти отримають повідомлення з питанням, чи вони хочуть використовувати цей сервер. По суті, клієнтське програмне забезпечення каже: "Увага! Ви просили mail.sample.com; відповідний сертифікат машини для smtp.sample.com. Ви впевнені, що хочете продовжити?"

 

# openssl req -new -nodes -out req.pem -config ./openssl.cnf
...
Organizational Unit Name (department, division) []:Mail Server
Email Address []:postmaster@sample.com
Common Name (hostname, IP, or your name) []:mail.sample.com
...

Цей процес створює два файли в якості вихідних:

  • Приватний ключ в key.pem
  • запит на підпис сертифіката в req.pem

Ці файли повинні бути збережені. Коли сертифікат, що ви збираєтеся створити, закінчується, то запит може бути використаний повторно, щоб створити новий сертифікат з новим терміном придатності. Секретний ключ, звичайно, необхідний для шифрування SSL. При збереженні цих файлів, значущі імена допоможуть; наприклад, mailserver.key.pem і mailserver.req.pem.

Запит на підпис сертифіката виглядає наступним чином:

 

-----BEGIN CERTIFICATE REQUEST-----
MIICJDCCAY0CAQAwgagxGzAZBgNVBAoTElRoZSBTYW1wbGUgQ29tcGFueTEUMBIG
A1UECxMLTWFpbCBTZXJ2ZXIxJDAiBgkqhkiG9w0BCQEWFXBvc3RtYXN0ZXJAc2Ft
cGxlLmNvbTETMBEGA1UEBxMKTWV0cm9wb2xpczERMA8GA1UECBMITmV3IFlvcmsx
CzAJBgNVBAYTAlVTMRgwFgYDVQQDEw9tYWlsLnNhbXBsZS5jb20wgZ8wDQYJKoZI
hvcNAQEBBQADgY0AMIGJAoGBAPJhc++WxcBaoDbJpzFbDg42NcOz/ELVFMU4FlPa
yUzUO+xXkdFRMPKo54d4Pf1w575Jhlu9lE+kJ8QN2st6JFySbc9QjPwVwl9D2+I3
SSf2kVTu+2Ur5izCPbVAfU0rPZxxK8ELoOkA1uwwjFz6EFuVvnHwlguonWKDtmYW
u7KTAgMBAAGgOzA5BgkqhkiG9w0BCQ4xLDAqMAkGA1UdEwQCMAAwHQYDVR0OBBYE
FLWaQsUVIQzWr58HtDinH1JfeCheMA0GCSqGSIb3DQEBBAUAA4GBAAbe0jrGEQ3i
tyVfy5Lg4/f69rKvDGs+uhZJ9ZRx7Dl92Qq2osE7XrLB1bANmcoEv/ORLZOjWZEY
NjMvuz60O7R8GKBrvb/YhAwWhIIt2LJqPkpAEWS0kY0AkoQcfZ7h6oC35+eJ7okg
Uu3WuE57RgcNt7/ftr0sG1jUyRwMLvhv
-----END CERTIFICATE REQUEST-----

 

Ми можемо переглянути вміст, щоб переконатися, що наш запит є правильним:

# openssl req -in req.pem -text -verify -noout

 

Назад вгору

Підписання сертифікату

Тепер нам потрібно додати розділ файлу конфігурації, який має справу з тим, що він іще є Центром сертифікації. Ця секція визначить шляхи шляхи до різних штук, таких як база даних, сертифікат ЦС і приватний ключ. Вона також надає деякі базові значення за замовчуванням. Вставте цей код в openssl.cnf прям перед секцією [ req ]:

---Begin---
[ ca ]
default_ca		= CA_default

[ CA_default ]
serial			= $dir/serial
database		= $dir/index.txt
new_certs_dir		= $dir/newcerts
certificate		= $dir/cacert.pem
private_key		= $dir/private/cakey.pem
default_days		= 365
default_md		= md5
preserve		= no
email_in_dn		= no
nameopt			= default_ca
certopt			= default_ca
policy			= policy_match

[ policy_match ]
countryName		= match
stateOrProvinceName	= match
organizationName	= match
organizationalUnitName	= optional
commonName		= supplied
emailAddress		= optional

----End----

 

Для того, щоб підписати запит, який ми зробили в попередньому кроці, виконайте наступне і зважайте на підказки. Зверніть увагу, що вам необхідно вказати кодову фразу PEM, обрану раніше:

 


# openssl ca -out cert.pem -config ./openssl.cnf -infiles req.pem
Using configuration from ./openssl.cnf
Enter PEM pass phrase:demo
Check that the request matches the signature
Signature ok
The Subjects Distinguished Name is as follows
organizationName      :PRINTABLE:'The Sample Company'
organizationalUnitName:PRINTABLE:'Mail Server'
emailAddress          :IA5STRING:'postmaster@sample.com'
localityName          :PRINTABLE:'Metropolis'
stateOrProvinceName   :PRINTABLE:'New York'
countryName           :PRINTABLE:'US'
commonName            :PRINTABLE:'mail.sample.com'
Certificate is to be certified until Dec  8 04:37:38 2002 GMT (365 days)
Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

 

Цей процес оновлює базу даних ЦС, і робить два файли в якості висновку:

  • Сертифікат в cert.pem
  • Копія сертифіката в newcerts/<serial>.pem

Знову ж таки, ви можете перевірити Сертифікат:

 

# openssl x509 -in cert.pem -noout -text -purpose | more

 

Сертифікат має і кодовану версію і читану версію в тому ж файлі. Ви можете видалити читану частину наступним чином:

# mv cert.pem tmp.pem
# openssl x509 -in tmp.pem -out cert.pem
 

Назад вгору

Установка сертифіката і ключа

Це залежить від програми. Деякі хочуть ключ і Сертифікат в одному і тому ж файлі, а інші хочуть їх окремо. Об'єднання їх легко зробити за допомогою:

# cat key.pem cert.pem >key-cert.pem

 

Після цього кроку, у вас є три компоненти, з яких вибрати:

  • Приватний ключ в key.pem
  • Сертифікат в cert.pem
  • Комбінований закритий ключ і сертифікат в key-cert.pem

Скопіюйте відповідні файли в місця, зазначені в інструкціях для вашого додатку і системи. Перезапустіть додатки, і ви в роботі з новим сертифікатом.

Apache

Apache має окремі директиви конфігурації для ключа і сертифіката, тому ми тримаємо кожен в своєму власному файлі. Ці файли повинні зберігатися за межами піддерева DocumentRoot, тому розумна структура каталогів може бути:

Файл

Коментар

/home/httpd/html

Apache DocumentRoot

/home/httpd/ssl

SSL-related files

/home/httpd/ssl/cert.pem

сертифікат сайту

/home/httpd/ssl/key.pem

Приватний ключ сайту

Директива <VirtualHost> для сайту (який, звичайно, повинен бути на порту 443), містить у собі директиви, які вказують на ці файли:

<VirtualHost 192.168.1.1:443>
   ServerName mail.sample.com
   DocumentRoot /home/httpd/html
   ... other directives for this site ...
   SSLEngine on
   SSLLog /var/log/ssl_engine_log
   SSLCertificateFile /home/httpd/ssl/cert.pem
   SSLCertificateKeyFile /home/httpd/ssl/key.pem
</VirtualHost>

 

Stunnel

stunnel використовується в якості обгортки SSL для звичайних, не захищених послуг, таких як IMAP і POP. Він приймає в якості аргументів (крім усього іншого) служби для виконання, а також розташування сертифіката та приватного ключа.

Ключ та сертифікат надаються в одному і тому ж файлі. Вони можуть йти в будь-яке місце, але гарне місце може бути /etc/ssl/certs. Вкажіть його в командному рядку Stunnel наступним чином:


stunnel -p /etc/ssl/certs/key-cert.pem <other stunnel args...>

 

Назад вгору

Поширення сертифіката ЦС

Це, врешті-решт, крок, який зупиняє клієнтів від скарг на ненадійні сертифікати. Sendcacert.pem для всіх, хто збирається використовувати ваші захищені сервери, щоб вони могли встановити його в свої браузери, поштові клієнти, і так далі в якості кореневого сертифіката.

Назад вгору

Оновлення сертифікатів

Ваш ланцюжок сертифікатів може зламатись через закінчення терміну дії сертифіката двома способами:

  • Сертифікати, які ви підписали з вашим кореневим сертифікатом закінчився.
  • Ваш кореневий сертифікат сам по собі закінчився.

У другому випадку, у вас є деяка робота для виконання. Новий кореневий сертифікат центру сертифікації повинен бути створений та поширений, а потім ваші існуючі сертифікати повинні бути створені повторно або повторно підписані.

У першому випадку, у вас є два варіанти. Ви можете або створити нові запити на підпис сертифіката і підписати їх, як описано вище, або (якщо ви зберегли їх) ви можете заново підписати первинні запити. У будь-якому випадку, старі сертифікати повинні бути відкликані, а потім нові сертифікати підписані і встановлені в ваші захищені програми, як описано вище.

Ви не можете видавати два сертифікати з одним і тим же Спільним іменем, ось чому прострочені сертифікати повинні бути анульовані. Сертифікат знаходиться в каталозі newcerts; ви можете визначити його ім'я при перегляді index.txt і під час пошуку Спільного імені (CN) на ньому. Ім'я файла це індекс плюс розширення ".pem", наприклад "02.pem". Щоб відкликати сертифікат:

# openssl ca -revoke newcerts/02.pem -config ./openssl.cnf
Using configuration from ./openssl.cnf
Enter PEM pass phrase: demo
Revoking Certificate 02.
Data Base Updated

 

Тепер, коли сертифікат був анульований, ви можете повторно підписати початковий запит, або створити і підписати новий, як описано вище.

Назад вгору

Отримання комерційно підписаного сертифіката

Процес в основному такий самий, як той, що щойно продемонстрований, проте ЦС виконує велику його частину. Вам необхідно створити запит на підпис сертифіката, як показано вище, а потім надати його для підписання. Ви отримаєте підписаний сертифікат для установки.

Цей сертифікат буде автоматично впізнаний браузером Вашого клієнта, так як браузер має вбудований сертифікат комерційного центру сертифікації. Немає необхідності поширювати що-небудь.

Конфігурація, описана тут, може виявитися недостатньою для цієї мети, так як є набагато більше того, що може піти у запит. Різні органи сертифікації вимагають різних функцій в запиті на підписання сертифіката, жоден з яких ми тут не розглядали. Цей додатковий матеріал знаходиться за межами поточної рамки цього документа.

Назад вгору

Публікація вашого сертифіката ЦС

Ви можете помістити сертифікат на вашому веб-сайті для завантаження. Якщо ви зробите це, ви повинні також опублікувати список відкликаних сертифікатів (CRL) і засіб відображення сертифіката з урахуванням його серійного номера. Це також поза поточною рамкою цього документа.

Apache буде служити вашому сертифікату у вигляді такого, що впізнається для браузерами, якщо ви зазначите його тип MIME. Наприклад, ви можете використовувати розширення filename ".crt" для завантажуваних сертифікатів і помістити наступне в загальну секцію конфігурації Apache:

AddType application/x-x509-ca-cert .crt

 

Тепер ви можете помістити сертифікат для скачування з посиланням, як <a href="www.sample.com/ourrootcert.crt">Our Root Certificate</a>, і коли посилання використовується, браузер відвідувача запропонує встановити сертифікат.

CRL може бути створено в такий спосіб:

# openssl ca -gencrl -crldays 31 -config ./openssl.cnf -out rootca.crl

 

Назад вгору

Резюме

Тепер у вас є достатньо інформації, щоб створювати і підписувати сертифікати від свого імені. Хоча це досить довгий документ, процедуру можна буде легко підсумувати.

Одноразова установка

Налагодження та створення кореневого сертифіката ЦС.

Команди

# mkdir CA
# cd CA
# mkdir newcerts private
# echo '01' >serial
# touch index.txt
# (IMPORTANT: Install and edit the configuration file shown below.)
# openssl req -new -x509 -extensions v3_ca -keyout private/cakey.pem \
-out cacert.pem -days 365 -config ./openssl.cnf
 

Вихід

Файл

Мета

cacert.pem

Сертифікат ЦС

private/cakey.pem

Приватний ключ ЦС

Поширте cacert.pem серед ваших клієнтів.

Про сертифікат

Створення запитів на підпис сертифіката і підписання їх, поставляючи відповідні значення для спільного імені і організаційної одиниці.

Команди

# openssl req -new -nodes -out req.pem -config ./openssl.cnf
# openssl ca -out cert.pem -config ./openssl.cnf -infiles req.pem
# cat key.pem cert.pem >key-cert.pem

 

Вихід

Файл

Ціль

key.pem

Приватний ключ

req.pem

Запит на підпис сертифіката

cert.pem

Сертифікат

key-cert.pem

Комбінований приватний ключ і сертифікат

Встановіть key.pem і cert.pem, або просто key-cert.pem як належить для вашого додатку сервера.

Відновлення сертифіката

Скасуйте сертифікат з вичерпаним терміном і повторно підпишіть початковий запит.

Команди

# openssl ca -revoke newcerts/<serial>.pem -config ./openssl.cnf
# openssl ca -out cert.pem -config ./openssl.cnf -infiles req.pem

 

Встановіть оновлені сертифікати в такий самий спосіб, як і оригінальні.

Назад вгору

Файл конфігурації

(цей файл доступний для завантаження.)

---Begin---
#
# OpenSSL configuration file.
#

# Establish working directory.

dir			= .

[ ca ]
default_ca		= CA_default

[ CA_default ]
serial			= $dir/serial
database		= $dir/index.txt
new_certs_dir		= $dir/newcerts
certificate		= $dir/cacert.pem
private_key		= $dir/private/cakey.pem
default_days		= 365
default_md		= md5
preserve		= no
email_in_dn		= no
nameopt			= default_ca
certopt			= default_ca
policy			= policy_match

[ policy_match ]
countryName		= match
stateOrProvinceName	= match
organizationName	= match
organizationalUnitName	= optional
commonName		= supplied
emailAddress		= optional

[ req ]
default_bits		= 1024			# Size of keys
default_keyfile		= key.pem		# name of generated keys
default_md		= md5			# message digest algorithm
string_mask		= nombstr		# permitted characters
distinguished_name	= req_distinguished_name
req_extensions		= v3_req

[ req_distinguished_name ]
# Variable name		  Prompt string
#----------------------	  ----------------------------------
0.organizationName	= Organization Name (company)
organizationalUnitName	= Organizational Unit Name (department, division)
emailAddress		= Email Address
emailAddress_max	= 40
localityName		= Locality Name (city, district)
stateOrProvinceName	= State or Province Name (full name)
countryName		= Country Name (2 letter code)
countryName_min		= 2
countryName_max		= 2
commonName		= Common Name (hostname, IP, or your name)
commonName_max		= 64

# Default values for the above, for consistency and less typing.
# Variable name			  Value
#------------------------------	  ------------------------------
0.organizationName_default	= The Sample Company
localityName_default		= Metropolis
stateOrProvinceName_default	= New York
countryName_default		= US

[ v3_ca ]
basicConstraints	= CA:TRUE
subjectKeyIdentifier	= hash
authorityKeyIdentifier	= keyid:always,issuer:always

[ v3_req ]
basicConstraints	= CA:FALSE
subjectKeyIdentifier	= hash

----End----

 

Назад вгору

Посилання

Більш детальна інформація доступна на наступних сайтах (відкриється в новому вікні):

Оригінал статті знаходиться тут http://www.eclectica.ca/howto/ssl-cert-howto.php