В этом руководстве мы рассмотрим различные методы создания самозаверяющего сертификата SSL/TLS с использованием OpenSSL без необходимости ввода парольной фразы. Мы предоставим примеры кода для каждого метода, чтобы вам было легче следовать им. Итак, начнем!
Метод 1: создание самозаверяющего сертификата без парольной фразы с использованием командной строки OpenSSL
OpenSSL предоставляет интерфейс командной строки, который позволяет создавать самозаверяющий сертификат без парольной фразы. Используйте следующую команду:
openssl req -x509 -newkey rsa:2048 -keyout server.key -out server.crt -days 365 -nodes
Объяснение:
req: указывает на создание запроса на подпись сертификата (CSR).-x509: указывает, что должен быть создан самозаверяющий сертификат.-newkey rsa:2048: генерирует новый закрытый ключ RSA длиной 2048 бит.-keyout server.key: указывает выходной файл для закрытого ключа.-out server.crt: указывает выходной файл для самозаверяющего сертификата.-days 365: устанавливает срок действия сертификата на 365 дней.-nodes: удаляет парольную фразу из закрытого ключа.
Метод 2: создание самозаверяющего сертификата без парольной фразы с использованием файла конфигурации OpenSSL
Другой подход — использовать файл конфигурации OpenSSL для создания самозаверяющего сертификата без парольной фразы. Вот пример файла конфигурации:
# openssl.cnf
[req]
prompt = no
encrypt_key = no
default_md = sha256
distinguished_name = dn
[dn]
CN = YourCommonName
Чтобы сгенерировать сертификат, используйте следующую команду:
openssl req -x509 -newkey rsa:2048 -config openssl.cnf -keyout server.key -out server.crt -days 365 -nodes
Объяснение:
- Файл конфигурации (
openssl.cnf) определяет общее имя (CN) сертификата в разделе[dn]. -config openssl.cnf: предписывает OpenSSL использовать файл конфигурации.
Метод 3. Создание самозаверяющего сертификата без парольной фразы с использованием OpenSSL с API библиотеки OpenSSL
Если вы предпочитаете использовать API библиотеки OpenSSL в своем собственном коде, вот пример на C:
#include <openssl/x509.h>
#include <openssl/pem.h>
int main() {
X509 *cert;
EVP_PKEY *key;
X509_NAME *name;
FILE *fp;
// Generate a new RSA key
key = EVP_PKEY_new();
RSA *rsa = RSA_generate_key(2048, RSA_F4, NULL, NULL);
EVP_PKEY_assign_RSA(key, rsa);
// Create a new certificate
cert = X509_new();
X509_set_version(cert, 2);
X509_set_pubkey(cert, key);
// Set the certificate's validity period
X509_gmtime_adj(X509_get_notBefore(cert), 0);
X509_gmtime_adj(X509_get_notAfter(cert), 31536000L); // 1 year
// Set the certificate's subject name
name = X509_get_subject_name(cert);
X509_NAME_add_entry_by_txt(name, "CN", MBSTRING_ASC,
(unsigned char *)"YourCommonName", -1, -1, 0);
// Sign the certificate with the private key
X509_sign(cert, key, EVP_sha256());
// Write the certificate to a file
fp = fopen("server.crt", "wb");
PEM_write_X509(fp, cert);
fclose(fp);
// Write the private key to a file
fp = fopen("server.key", "wb");
PEM_write_PrivateKey(fp, key, NULL, NULL, 0, NULL, NULL);
fclose(fp);
// Clean up
X509_free(cert);
EVP_PKEY_free(key);
return 0;
}
Объяснение:
- Этот код генерирует новый ключ RSA, создает сертификат, устанавливает срок его действия и подписывает его закрытым ключом.
- Сертификат и закрытый ключ затем записываются в отдельные файлы (
server.crtиserver.keyсоответственно).