PFX към PEM и KEY: когато Windows сертификатът трябва да заживее в Red Hat

·3 min read

Привет,

Попаднах в ситуация, в която трябваше да взема PFX сертификат от Windows CA и да го накарам да работи на Red Hat машина.

Какво е PFX/PKCS#12?

PFX (Personal Information Exchange) файлът е контейнер, който съдържа:

  • Публичен сертификат
  • Частен ключ
  • Веригата от междинни сертификати (certificate chain)
  • Всичко това е защитено с парола

Windows обича този формат, защото е удобен за пренасяне - всичко е в един файл.

Необходими инструменти

След като сте прехвърлили PFX файла от Windows машината на вашата Red Hat система, ще използваме OpenSSL за конвертирането.

На Red Hat/RHEL/CentOS/Rocky Linux/AlmaLinux OpenSSL обикновено е предварително инсталиран. Ако не е:

# За RHEL 8/9 и производни
sudo dnf install openssl

# За по-стари версии (RHEL 7)
sudo yum install openssl

Проверка на версията:

openssl version

Стъпка по стъпка процес

1. Извличане на сертификата (PEM)

Първо извличаме публичния сертификат без частния ключ:

openssl pkcs12 -in certificate.pfx -clcerts -nokeys -out certificate.pem

Ще бъдете подканени за паролата на PFX файла.

2. Извличане на частния ключ (със защита)

За да извлечем частния ключ, но все още защитен с парола:

openssl pkcs12 -in certificate.pfx -nocerts -out key-encrypted.key

3. Премахване на паролата от частния ключ

Ако искате незащитен частен ключ (внимание с правата за достъп!):

openssl rsa -in key-encrypted.key -out key.key

4. Извличане на CA веригата

Ако имате нужда и от междинните сертификати:

openssl pkcs12 -in certificate.pfx -cacerts -nokeys -chain -out ca-chain.pem

Всичко наведнъж

За по-бързо можете да използвате този скрипт:

#!/bin/bash
# Проверка за аргументи
if [ $# -eq 0 ]; then
    echo "Използване: ./pfx2pem.sh certificate.pfx"
    exit 1
fi

PFX_FILE=$1
BASE_NAME="${PFX_FILE%.*}"

echo "Конвертиране на $PFX_FILE..."

# Извличане на сертификата
openssl pkcs12 -in "$PFX_FILE" -clcerts -nokeys -out "${BASE_NAME}.crt"

# Извличане на частния ключ (без парола)
openssl pkcs12 -in "$PFX_FILE" -nocerts -nodes -out "${BASE_NAME}.key"

# Извличане на CA веригата
openssl pkcs12 -in "$PFX_FILE" -cacerts -nokeys -chain -out "${BASE_NAME}-ca.crt"

echo "Готово! Създадени файлове:"
echo "  - ${BASE_NAME}.crt (сертификат)"
echo "  - ${BASE_NAME}.key (частен ключ)"
echo "  - ${BASE_NAME}-ca.crt (CA верига)"

Проверка на резултата

След конвертирането можете да проверите файловете:

# Проверка на сертификата
openssl x509 -in certificate.pem -text -noout

# Проверка на частния ключ
openssl rsa -in key.key -check

# Проверка дали ключът отговаря на сертификата
openssl x509 -noout -modulus -in certificate.pem | openssl md5
openssl rsa -noout -modulus -in key.key | openssl md5

Ако MD5 сумите съвпадат, значи ключът и сертификатът са чифт.

Сигурност под Red Hat

Няколко важни съвета специфични за Red Hat системи:

  • Винаги задавайте рестриктивни права на частния ключ: chmod 600 key.key
  • Използвайте SELinux контексти правилно:
    # За Apache/httpd
    semanage fcontext -a -t cert_t "/etc/pki/tls/certs/certificate.pem"
    semanage fcontext -a -t cert_t "/etc/pki/tls/private/key.key"
    restorecon -v /etc/pki/tls/certs/certificate.pem
    restorecon -v /etc/pki/tls/private/key.key
  • Не оставяйте незащитени ключове на публично достъпни места
  • След конвертиране изтрийте временните файлове
  • Помислете дали наистина трябва да премахвате паролата от ключа

Използване в различни услуги на Red Hat

Nginx

ssl_certificate /etc/nginx/ssl/certificate.pem;
ssl_certificate_key /etc/nginx/ssl/key.key;

Apache/httpd

SSLCertificateFile /etc/pki/tls/certs/certificate.pem
SSLCertificateKeyFile /etc/pki/tls/private/key.key
SSLCertificateChainFile /etc/pki/tls/certs/ca-chain.pem

HAProxy

# HAProxy иска всичко в един файл
cat certificate.pem key.key > /etc/haproxy/certs/haproxy-cert.pem
chmod 600 /etc/haproxy/certs/haproxy-cert.pem

Проверка с firewall-cmd

След конфигурирането не забравяйте да отворите необходимите портове:

firewall-cmd --permanent --add-service=https
firewall-cmd --reload

Това е! Вече знаете как да конвертирате PFX файловете от Windows CA в по-универсалния PEM формат на вашата Red Hat система. Полезно е когато мигрирате от Windows към Linux или когато различните услуги изискват различен формат на сертификатите.