Использование самозаверенных сертификатов

Если вы не можете купить или получить сертификат https, вы можете сгенерировать его сами. Сертификат должен быть в формате PEM (ASCII BASE64), а сам файл должен содержать только публичный ключ (полностью, включая строки BEGIN и END).

После того, как вы создали сертификат, вам нужно будет загрузить его на сервера Telegram — для этого передайте его в поле certificate метода setWebhook. Это действие обязательно только для самозаверенных сертификатов. Приобретённые за деньги или полученные через certbot сертификаты никуда отправлять не нужно.

OpenSSL

Примечание

Исполняемые файлы OpenSSL для Windows доступны в сети.

Исходные коды доступны на GitHub и на официальном сайте.

Генерация пары сертификатов

openssl req -newkey rsa:2048 -sha256 -nodes -x509 -days 365 \
-keyout YOURPRIVATE.key \
-out YOURPUBLIC.pem \
-subj "/C=RU/ST=Saint-Petersburg/L=Saint-Petersburg/O=Example Inc/CN=domain.EXAMPLE"

Необходимо использовать YOURPUBLIC.pem в качестве публичного ключа при настройки вебхука.

  • Проверить сертификат можно командой:
    openssl x509 -text -noout -in YOURPUBLIC.pem
  • Конвертация из уже сгенерированного DER:
    openssl x509 -inform der -in YOURDER.der -out YOURPEM.pem
  • Конвертация из уже сгенерированного PKCS12:
    openssl pkcs12 -in YOURPKCS.p12 -out YOURPEM.pem

Java keystore

Совет

С подробной документацией можно ознакомиться на сайте документации Oracle.

Генерация самозаверенного JKS

keytool -genkey -keyalg RSA \
-alias YOURDOMAIN.EXAMPLE \
-keystore YOURJKS.jks \
-storepass YOURPASSWORD \
-validity 360 \
-keysize 2048

Конвертация JKS в PKCS12

Промежуточный этап перед конвертацией в PEM:

keytool -importkeystore \
-srckeystore YOURJKS.jks \
-destkeystore YOURPKCS.p12 \
-srcstoretype jks \
-deststoretype pkcs12

Конвертация PKCS12 в PEM

Для этой операции необходим OpenSSL:

openssl pkcs12 -in YOURPKCS.p12 -out YOURPEM.pem

Windows

Создание самозаверенного сертификата доступно и стандартными средствами Windows, несмотря на то, что исполняемые файлы OpenSSL для Windows доступны для скачивания.

Примечание

Для настройки вебхука нужен только публичный ключ.

Создайте файл TEMPLATE.txt с таким содержанием:

[NewRequest]
; В этом разделе должно быть хотя бы одно значение:
Subject = "CN=DOMAIN.EXAMPLE"
KeyLength = 2048
KeyAlgorithm = RSA
HashAlgorithm = sha256
; MachineKeySet = true
RequestType = Cert
UseExistingKeySet=false ; Генерирует новый приватный ключ для экспорта
Exportable = true ; Делает возможным экспорт приватного ключа в PFX

Далее выполните в командной строке:

certreq -new TEMPLATE.txt RequestFileOut

После этого будет создан и установлен самозаверенный сертификат. Для просмотра выполните:

certutil -store -user my

Экспортируем в DER (промежуточный этап перед конвертацией в PEM):

certutil -user -store -split my SERIALNUMBER YOURDER.crt

Конвертация в PEM (используется для настройки вебхука):

certutil -encode YOURDER.crt YOURPEM.cer

Удаление сертификата из хранилища:

certutil -delstore -user my SERIALNUMBER

Экспорт в формат PFX(PKCS12):

certutil -exportpfx -user YOURDOMAIN.EXAMPLE YOURPKCS.pfx NoChain
Совет

С подробной документацией можно ознакомиться на сайте документации Microsoft.

Конвертировать YOURPKCS.pfx в PEM (который включает в себя приватный ключ) лучше делать с помощью OpenSSL:

openssl pkcs12 -in YOURPKCS.pfx -out YOURPEM.cer

В качестве графического интерфейса для экспорта публичной части сертификата в PEM можно использовать certmgr.msc.