Delphi. Как создать SSL сертификат самостоятельно?

Если проект находится во внутренней сети и требуется SSL протокол, то, насколько я понял вполне можно обойтись сертификатами, сделанными самостоятельно. Браузеры, конечно, такой сертификат отвергнут напрочь, это и понятно. Тут и безопасность и бизнес. Но часть задач можно решить используя свой сертификат. Например, мне нужно было организовать безопасное соединение между HTTP клиентом и HTTP сервером для отправки POST запросов. Посмотрим как это делается сегодня.

Во многом мне помог в этом вопросе сайт Андрей Ренжиглова. Часть информации, я продублирую сюда, со ссылкой на сайт, а часть добавлю от себя.

Как создать свой SSL сертификат сроком на 3 года?

Скачиваем и устанавливаем OpenSSL для WIndows

Создаем файл openssl.cnf (создаем текстовый файл и меняем расширение)

Пример файла  openssl.cnf с сайта Андрея

Андрей все делал в той же папке, где и файл  OpenSSL.exe,

Я же просто создал на рабочем столе отдельную папку для генерации всех этих сертификатов и складывал их постепенно туда, вот что у меня получилось в итоге

48

Далее, при помощи CMD Windows (Win+X >Командная строка) создаем файлы при помощи следующих инструкций, предварительно поменяв директорию в CMD, следующим образом, иначе не будет работать.

Создаем privkey.pem

>OPENSSL genrsa –out privkey.pem

//Если в своей папке, тогда так…
OPENSSL genrsa –out C:\Users\YellowFriend\Desktop\SSL-Certificates\mabanza\privkey.pem

49

Создаем cert.pem

Если openssl.cnf лежит вместе с OpenSSL.exe

Теперь необходимо создать самоподписанный сертификат сроком действия, скажем, три года. В командной строке наберите

>OPENSSL req –new –x509 –key privkey.pem –out cert.pem –days 1095 –config openssl.cnf

Если в своей папке, тогда так

OPENSSL req –new –x509 –key C:\Users\YellowFriend\Desktop\SSL-Certificates\mabanza\privkey.pem –out C:\Users\YellowFriend\Desktop\SSL-Certificates\mabanza\cert.pem –days 1095 –config C:\Users\YellowFriend\Desktop\SSL-Certificates\mabanza\openssl.cnf

50

 

В этом месте он будет переспрашивать значения параметров, но если Вы ничего не собираетесь менять – просто жмите Enter несколько раз.

Создаем root.pem

Теперь в вашем распоряжении имеется два файла: privkey.pem и cert.pem. Третий файл root.pem, получите простым копированием cert.pem в root.pem.

Последний штрих

Переименуйте файл privkey.pem в key.pem

Если всё правильно сделали, у нас получится 3 необходимых нам файла

-cert.pem

-key.pem

root.pem

Полученные файлы лучше всего положить в папку с проектом, чтобы не зависеть от того – будут ли такие файлы или их предыдущие версии на компьютере другого человека, которому Вы будете устанавливать программу.

Другой вариант

Есть и другой способ – через IIS

51

 

52

 

53

 

54

 

55

 

Но тут вся проблема в том, что нам то нужны pem файлы, и да, мы можем конвертировать pfx в pem с помощью вот этого

openssl.exe pkcs12 –in <your file>.pfx –out <your file>.pem

Но что с этим делать далее – не совсем понятно. В книге Погружение в Indy Анатолия Подгорецкого есть такой момент

Если вы посмотрите созданный .pem файл с помощью блокнота, то вы увидите, что он разделен
на две части. Эти две части содержат приватный и публичный ключи. Также приведено
некоторое количество информации. Indy требует, что бы данная информация была помещена в
отдельные файлы.

Но вот посмотрел я и не увидел этого, у меня получилось так…

56

 

А в книге Анатолия Подгорецкого выходит так

18.4.4. Файл Key.pem
С помощью блокнота создайте файл key.pem и скопируйте все между двумя, ниже указанными
строками:
—–BEGIN RSA PRIVATE KEY—–
—–END RSA PRIVATE KEY—–
18.4.5. Файл Cert.pem
С помощью блокнота создайте файл cert.pem и скопируйте все между двумя, ниже указанными
строками:
—–BEGIN CERTIFICATE—–
—–END CERTIFICATE—–

В общем этот способ у меня не сработал, поэтому я привел первый способ.

Что дальше?

Для дальнейшей работы нужно положить полученные файлы в папку с проектом и собственно использовать SSL протокол. О том как это сделать – посмотрим в следующем посте.

This entry was posted in Delphi, Indy. Bookmark the permalink.