PFX към PEM и KEY: когато Windows сертификатът трябва да заживее в Red Hat
Привет,
Попаднах в ситуация, в която трябваше да взема 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.key3. Премахване на паролата от частния ключ
Ако искате незащитен частен ключ (внимание с правата за достъп!):
openssl rsa -in key-encrypted.key -out key.key4. Извличане на 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.pemHAProxy
# 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 или когато различните услуги изискват различен формат на сертификатите.