Подготовка SMIME свидетельств для выполнения проверок
Свидетельства для проверок расположены здесь:
scripts/test/sample/SMIME
Они начинаются на SMIME*.
Имеют следующие расширения:
- .crt
- .pem
- .asc
- .der
- .p7b
- .pfx
- .key
Создание свидетельств
Создадим папку, где будут располагаться все наши подготавливаемые свидетельства:
mkdir Certs
Все дальнейшие действия будем выполнять в ней:
cd Certs
Создадим Корневой издатель свидетельств (ИС)
Подготовим необходимые для создания свидетельств папки и файлы:
mkdir RadiantCA
cd RadiantCA
mkdir certs crl newcerts private
echo "01" > serial
cp /dev/null index.txt
cp /usr/lib/ssl/openssl.cnf .
- index.txt – список выпущенных свидетельств (изначально пустой).
- serial – текущее последовательное число.
- openssl.cnf – файл настроек для openssl (взят тот, который идёт вместе с openssl). Исходный openssl.cnf в зависимости от ОС может располагаться в разных местах.
index.txt и serial прописаны в openssl.cnf в разделе [ CA_default ]
:
[ CA_default ]
dir = .
...
database = $dir/index.txt
serial = $dir/serial
Создадим личный ключ:
openssl genrsa -des3 -out private/SMIMECAPrivateKey-RadiantCARoot.pem 4096
- openssl genrsa – приказ для создания личного ключа RSA.
- -des3 – пошаговость для тайнописи Тройной DES.
- -out – куда поместим создаваемый ключ.
- 4096 – размер ключа в битах.
При выполнении попросит ввести (придумать) пропуск.
Создадим самоподписанное свидетельство
openssl req -new -x509 -nodes -sha1 -days 3650 \
-key private/SMIMECAPrivateKey-RadiantCARoot.pem \
-out SMIMECACertificate-RadiantRoot.crt
- openssl req – приказ для создания самоподписанного свидетельства.
- -new – создаёт запрос для свидетельства.
- -x509 – вместе с данным ключом -new создаст самоподписанное свидетельство вместо запроса для свидетельства.
- -nodes – без тайнописи.
- -sha1 – вид пошаговости для перемешивания SHA1.
- -days 3650 – количество дней в течение которого свидетельство достоверно
- -key – путь к личному ключу.
- -out – путь к создаваемому свидетельству.
Создадим Промежуточный издатель свидетельств (ИС)
Подготовим необходимые для создания свидетельств папки и файлы:
mkdir RadiantRD
cd RadiantRD
mkdir certs crl newcerts private
echo "01" > serial
cp /dev/null index.txt
cp /usr/lib/ssl/openssl.cnf .
Создадим личный ключ
openssl genrsa -des3 -out private/SMIMECAPrivateKey-RadiantRD.pem 4096
Создадим открытый ключ
Для начала создадим запрос .csr на получение свидетельства:
openssl req -new -sha1 \
-key private/SMIMECAPrivateKey-RadiantRD.pem \
-out SMIMECACertificate-RadiantRD.csr
Просмотреть сведения о созданном запросе можно так:
openssl asn1parse -i -in SMIMECACertificate-RadiantRD.csr
Теперь запросим непосредственно открытый ключ, предварительно настроив openssl.cnf:
[ CA_default ]
dir = .
certificate = $dir/SMIMECACertificate-RadiantRD.csr.crt
private_key = $dir/../RadiantRD/private/SMIMECAPrivateKey-RadiantRD.pem
И, непосредственно, получение открытого ключа:
mv SMIMECACertificate-RadiantRD.csr ../RadiantCA
cd ../RadiantCA
openssl ca -extensions v3_ca \
-days 3650 \
-out SMIMECACertificate-RadiantRD.csr.crt \
-in SMIMECACertificate-RadiantRD.csr \
-config openssl.cnf
Переносим полученные записи обратно в папку:
mv SMIMECACertificate-RadiantRD.csr ../RadiantRD
mv SMIMECACertificate-RadiantRD.csr.crt ../RadiantRD
Настроим второй промежуточной издатель свидетельств
Подготовим необходимые для создания свидетельств папки и файлы:
mkdir RadiantLab
cd RadiantLab
mkdir certs crl newcerts private
echo "01" > serial
cp /dev/null index.txt
cp /usr/lib/ssl/openssl.cnf .
Создадим личный ключ
openssl genrsa -des3 -out private/SMIMECAPrivateKey-RadiantLab.pem 4096
Создадим открытый ключ
Сначала .csr как и прошлый раз:
openssl req -new -sha1 \
-key private/SMIMECAPrivateKey-RadiantLab.pem \
-out SMIMECACertificate-RadiantLab.csr
Переносим в родительскую папку и переходим в неё:
mv SMIMECACertificate-RadiantLab.csr ../RadiantRD
cd ../RadiantRD
В текущем openssl.conf в разделе [v3_ca] следует прописать:
[v3_ca]
subjectAltName=@alt_emails
[alt_emails]
email.1=unittest4@example.org
email.2=unittest5@example.org
Получаем открытый ключ
openssl ca -extensions v3_ca \
-days 3650 \
-out SMIMECACertificate-RadiantLab.csr.crt \
-in SMIMECACertificate-RadiantLab.csr \
-config openssl.cnf
И перемещаем его обратно:
mv SMIMECACertificate-RadiantLab.csr ../Lab
Создадим Пользовательское свидетельство
Подготовим необходимые для создания свидетельств папки и файлы:
mkdir User
cd User
mkdir certs crl newcerts private
echo "01" > serial
cp /dev/null index.txt
cp /usr/lib/ssl/openssl.cnf .
Создадим личный ключ
openssl genrsa -des3 -out private/SMIMEPrivateKey-smimeuser1.pem 4096
Создадим открытый ключ
Сначала .csr:
openssl req -new \
-key private/SMIMEPrivateKey-smimeuser1.pem \
-out SMIMECertificate-smimeuser1.csr \
-config openssl.cnf
Переносим на подпись:
mv SMIMECertificate-smimeuser1.csr ../Lab
cd ../Lab
Непосредственно получение ключа:
openssl x509 -req \
-days 3650 \
-CA cacert.crt \
-CAkey private/SMIMECAPrivateKey-RadiantLab.pem \
-CAcreateserial \
-in SMIMECertificate-smimeuser1.csr \
-out SMIMECertificate-smimeuser1.crt
Переносим полученные файлы обратно:
mv SMIMECertificate-smimeuser1.\* User
Перенос полученных ключей по местам для проверок
Напоминаю, папка для проверок расположена здесь:
scripts/test/sample/SMIME
Собственно, сам перенос и указание тайного слова для ключей, которое было использовано при их создании:
cp RadiantCA/SMIMECACertificate-RadiantRoot.crt scripts/test/sample/SMIME/SMIMECACertificate-RadiantRoot.crt
cp RadiantCA/private/SMIMECAPrivateKey-RadiantCARoot.pem scripts/test/sample/SMIME/SMIMECAPrivateKey-RadiantRoot.pem
echo -n "12345" > scripts/test/sample/SMIME/SMIMECAPrivateKeyPass-RadiantRoot.crt
тоже самое для остальных трёх чет ключей.
Таким же образом необходимо будет создать ключи для SMIMECertificate-1.asc, SMIMECertificate-2.asc и т.п, с последующим переносом в папку для проверок.
Отдельно придётся повторить создание подобных свидетельств для проверок в SMIME.t, только полученные ключи необходимо будет прописать в SMIME.t явно.
Особым случаем при создании личных ключей можно считать запись вида:
$Private{SmimeTest_4} = {
CertString => '-----BEGIN ENCRYPTED PRIVATE KEY-----
в то время как остальные имеют такой вид:
$Private{SmimeTest_3} = {
CertString => '-----BEGIN RSA PRIVATE KEY-----
Так вот, “ENCRYPTED” вид ключа можно получить с помощью следующего приказа:
openssl req -newkey rsa:2048 -keyout host.key
Преобразование ключей и свидетельств в другие расширения
В .pfx:
openssl pkcs12 -export \
-out SMIMECertificate-1.pfx \
-inkey SMIMEPrivateKey-1.asc \
-in SMIMECertificate-1.asc
В .p7b:
openssl crl2pkcs7 -nocrl \
-out SMIMECertificate-1.p7b \
-certfile SMIMECertificate-1.asc
В .der:
openssl x509 -outform der \
-in SMIMECertificate-1.asc \
-out SMIMECertificate-1.der