Apache SSL Client Authentication – Kamenitza Notepad

Skip to content

By Тодор in FreeBSD, Linux, Solaris, Windows

Налага се някои сайтове да са защитени с парола ползвайки basic механизъма на Apache или друг подобен. Сайтовете са защитени наистина… докато някой не открадне паролата, а това е лесно – много хора ползват елементарни пароли от сорта на “12345”, името си, фамилията, ЕГН, телефонен номер и т.н. Паролата може да бъде записана на листче, някой може да види какво натискате по клавиатурата и пак да бъде открадната.
Един по-добър метод е ползването на клиентски сертификати. В баузъра на клиента има инсталиран сертификат, който го идентифицира пред сървъра при опит за отваряне на защитен сайт. Сървърът предоставя достъп само на валидни за него сертификати.
Казах “по-добър метод”, което означава, че кражбата на сертификата е по-трудна от кражбата на парола. Значително по-трудна.

Създаваме СА (Certificate Authority):

<strong># openssl genrsa -aes256 -out ca.key 2048</strong>
Generating RSA private key, 2048 bit long modulus
..............+++
...................................................................+++
e is 65537 (0x10001)
Enter pass phrase for ca.key:
Verifying - Enter pass phrase for ca.key:

Добре е да сложим парола на личният ключ – ако някой го докопа ще може да си вади колкото си иска сертификати с него.

<strong># openssl req -new -x509 -days 3650 -key ca.key -out ca.crt</strong>
Enter pass phrase for ca.key:
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) [GB]:BG
State or Province Name (full name) [Berkshire]:Plovdiv
Locality Name (eg, city) [Newbury]:Plovdiv
Organization Name (eg, company) [My Company Ltd]:Kamenitza.ORG
Organizational Unit Name (eg, section) []:IT
Common Name (eg, your name or your server's hostname) []:Kamenitza.ORG
Email Address []:

Common Name: – името на организацията, която ще притежава сертификата, не е нужно да е интернет адрес.

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

<strong># openssl genrsa -out ivan.key 2048</strong>
Generating RSA private key, 2048 bit long modulus
.....................+++
..................................................................................+++
e is 65537 (0x10001)
<strong># openssl req -new -key ivan.key -out ivan.csr</strong>
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) [GB]:BG
State or Province Name (full name) [Berkshire]:Plovdiv
Locality Name (eg, city) [Newbury]:Plovdiv
Organization Name (eg, company) [My Company Ltd]:Kamenitza.org
Organizational Unit Name (eg, section) []:KO
Common Name (eg, your name or your server's hostname) []:Ivan Ivanov
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
<strong># openssl x509 -req -in ivan.csr -out ivan.crt -sha1 -CA ca.crt -CAkey ca.key -CAcreateserial -days 3650</strong>
Signature ok
subject=/C=BG/ST=Plovdiv/L=Plovdiv/O=Kamenitza.org/OU=KO/CN=Ivan Ivanov
Getting CA Private Key
Enter pass phrase for ca.key:
<strong># openssl pkcs12 -export -in ivan.crt -inkey ivan.key -name "Ivan Ivanov Cert" -out ivan.p12</strong>
Enter Export Password:
Verifying - Enter Export Password:

Паролата сложена тук се ползва при инсталацията на сертификата. Без нея не може да бъде импортнат в браузъра.

ivan.p12 – е потребителският сертификат, който трябва да се внесе в браузъра на клиента.

За да ограничим достъпа до дадена директория от сайт слагаме това в .htaccess файла:

SSLVerifyClient require
SSLVerifyDepth 1

Или в <directory> на конфигурационния файл на Apache.

Но най-важното е да кажем на Apache, кои са “доверените” сертификати и как да ги познава. За това трябва да се постави този ред в конфигурационният файл на Apache:

SSLCACertificateFile /ssl/ca/ca.crt

(естествено заменете пътя с вашия)

След рестартиране на Апача всичко би трябвало да работи.

(В статията приемам, че сайтът е вече конфигуриран успешно да работи с SSL сертификат през HTTPS)

Tags: , , , , , ,

Comment Feed

One Response



Some HTML is OK

or, reply to this post via trackback.

Continuing the Discussion

  1. […] Probably, this is important: The certificates was done under Linux. They should work on Win2003 server with installed Apache2 with enabled SSL module (PHP, MySQL). Also – pages can be accessed only via IP address of the server. Is it OK to configure certificate for IP address? Information we used to generate certificates is here. […]