Menu
Szybki wybór
Hosting Domeny VPS SSL Kalkulator Porównania FAQ
Aktywne kody
Wszystkie kody rabatowe

OpenSSL — generowanie certyfikatów, kluczy i konwersja formatów

Opublikowano: 10 kwietnia 2026 · Kategoria: Bezpieczeństwo

OpenSSL to szwajcarski scyzoryk świata kryptografii — biblioteka i narzędzie CLI używane do generowania kluczy prywatnych, tworzenia CSR (Certificate Signing Request), wystawiania certyfikatów self-signed, weryfikacji łańcucha CA i konwersji między formatami (PEM, DER, PFX). Każdy administrator Linuksa prędzej czy później musi z niego skorzystać: przy konfiguracji SSL dla własnego serwera, budowaniu wewnętrznej PKI, debugowaniu problemów z certyfikatami lub przygotowaniu certyfikatu dla aplikacji Java. Ten artykuł przeprowadzi przez wszystkie najważniejsze operacje z komentarzem wyjaśniającym co i dlaczego.

Generowanie kluczy prywatnych — RSA i ECDSA

# --- KLUCZE RSA ---

# RSA 2048-bit (minimum, nadal bezpieczny i kompatybilny ze starszymi systemami)
openssl genrsa -out private.key 2048

# RSA 4096-bit (wolniejszy TLS handshake, ale wieksze bezpieczenstwo)
openssl genrsa -out private.key 4096

# RSA z szyfrowaniem klucza haslem (wymaga podania hasla przy kazdym uzyciu)
openssl genrsa -aes256 -out private-encrypted.key 4096

# Sprawdz klucz
openssl rsa -in private.key -text -noout

# Wyodrebnij klucz publiczny z prywatnego
openssl rsa -in private.key -pubout -out public.key

# --- KLUCZE ECDSA (szybsze, krotsze, nowoczesne) ---

# Krzywa P-256 (prime256v1) — najlepsze wsparcie przegladarek, OK dla TLS
openssl ecparam -name prime256v1 -genkey -noout -out ec-private.key

# Krzywa P-384 (secp384r1) — wyzsze bezpieczenstwo, uzywane przez rzady i finanse
openssl ecparam -name secp384r1 -genkey -noout -out ec-private-384.key

# Krzywa X25519 (dla TLS 1.3 key exchange, nie do certyfikatow)
# X25519 jest uzywana do ECDHE, nie jako klucz certyfikatu

# Sprawdz klucz ECDSA
openssl ec -in ec-private.key -text -noout

# Lista dostepnych krzywych
openssl ecparam -list_curves

Tworzenie CSR — Certificate Signing Request

# CSR dla certyfikatu RSA — interaktywnie (pyta o CN, O, C itd.)
openssl req -new -key private.key -out request.csr

# CSR bez pytania — z parametrami w linii komend
openssl req -new -key private.key -out request.csr \
  -subj "/C=PL/ST=Mazowieckie/L=Warszawa/O=Moja Firma Sp z.o.o/CN=example.com"

# CSR z SAN (Subject Alternative Names) — wymagany przez nowoczesne CA (Chrome 58+)
# Stworz plik konfiguracyjny:
cat > san.cnf << 'EOF'
[req]
default_bits       = 2048
distinguished_name = req_distinguished_name
req_extensions     = v3_req
prompt             = no

[req_distinguished_name]
C  = PL
ST = Mazowieckie
L  = Warszawa
O  = Moja Firma
CN = example.com

[v3_req]
subjectAltName = @alt_names

[alt_names]
DNS.1 = example.com
DNS.2 = www.example.com
DNS.3 = api.example.com
EOF

openssl req -new -key private.key -out request.csr -config san.cnf

# Sprawdz zawartosc CSR
openssl req -in request.csr -text -noout
openssl req -in request.csr -verify -noout

Certyfikat self-signed — do testów i sieci wewnętrznej

# Self-signed na 1 rok (szybko, klucz + cert w jednym kroku)
openssl req -x509 -newkey rsa:2048 -keyout self.key -out self.crt \
  -days 365 -nodes \
  -subj "/C=PL/O=Dev/CN=localhost"

# Self-signed z SAN (wymaga pliku konfiguracyjnego)
openssl req -x509 -newkey rsa:4096 -keyout self.key -out self.crt \
  -days 730 -nodes \
  -config san.cnf \
  -extensions v3_req

# Self-signed ECDSA (szybszy, nowszy)
openssl req -x509 -newkey ec -pkeyopt ec_paramgen_curve:P-256 \
  -keyout ec-self.key -out ec-self.crt \
  -days 365 -nodes \
  -subj "/C=PL/O=Dev/CN=localhost"

# Sprawdz certyfikat
openssl x509 -in self.crt -text -noout
openssl x509 -in self.crt -noout -subject -issuer -dates

# Weryfikacja pary klucz-certyfikat (musza byc zgodne)
# Jesli MD5 hash sie zgadza — klucz pasuje do certyfikatu
openssl x509 -noout -modulus -in cert.pem | md5sum
openssl rsa -noout -modulus -in private.key | md5sum

Weryfikacja łańcucha certyfikatów

# Sprawdz certyfikat zdalnego serwera
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null \
  | openssl x509 -noout -text

# Sprawdz tylko daty waznosci
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null \
  | openssl x509 -noout -dates

# Sprawdz czy certyfikat wygasa za mniej niz 30 dni (exit code 1 = wygasa)
echo | openssl s_client -connect example.com:443 2>/dev/null \
  | openssl x509 -noout -checkend 2592000
# checkend N = liczba sekund od teraz (2592000 = 30 dni)

# Weryfikacja lancucha CA (potrzebny plik ca-bundle)
openssl verify -CAfile /etc/ssl/certs/ca-certificates.crt cert.pem

# Weryfikacja z lokalnym CA (dla wewnetrznych certyfikatow)
openssl verify -CAfile my-ca.crt server.crt

# Sprawdz kompletny lancuch (chain) certyfikatow serwera
openssl s_client -connect example.com:443 -showcerts 2>/dev/null | \
  openssl x509 -noout -issuer -subject

# Pobierz certyfikat serwera do pliku
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null \
  | openssl x509 > server.pem

Konwersja formatów — PEM, DER, PFX/PKCS12

Format Rozszerzenia Używany przez
PEM .pem, .crt, .cer, .key Linux, Apache, Nginx, Let's Encrypt
DER .der, .cer Java, Android, stary Internet Explorer
PFX / PKCS12 .pfx, .p12 Windows IIS, .NET, Tomcat, eksport
PKCS7 / P7B .p7b, .p7c Windows, Java — tylko certyfikaty (bez klucza)
# --- Konwersja PEM ↔ DER ---

# PEM → DER (dla Javy, Android)
openssl x509 -in cert.pem -outform DER -out cert.der

# DER → PEM
openssl x509 -in cert.der -inform DER -outform PEM -out cert.pem

# Klucz PEM → DER
openssl rsa -in private.key -outform DER -out private.der

# --- Tworzenie PFX/PKCS12 (cert + klucz + chain) ---

# Pakuj do PFX (dla Windows IIS, .NET)
openssl pkcs12 -export \
  -in cert.pem \
  -inkey private.key \
  -certfile chain.pem \
  -out bundle.pfx \
  -name "Moj serwer" \
  -password pass:mypassword

# Rozpakowywanie PFX → PEM
openssl pkcs12 -in bundle.pfx -nokeys -out cert.pem -password pass:mypassword
openssl pkcs12 -in bundle.pfx -nocerts -nodes -out private.key -password pass:mypassword

# Wszystko z PFX naraz (bez szyfrowania klucza)
openssl pkcs12 -in bundle.pfx -nodes -out bundle-all.pem -password pass:mypassword

# --- Tworzenie fullchain dla Nginx (certyfikat + intermediate CA) ---
cat cert.pem intermediate-ca.pem > fullchain.pem
# Kolejnosc jest wazna: najpierw certyfikat servera, potem CA chain

Najczęstsze pytania

Czym różni się certyfikat RSA od ECDSA? +
RSA to starszy algorytm oparty na faktoryzacji dużych liczb. Klucze RSA 2048-bit są bezpieczne, ale duże (wolniejszy TLS handshake). ECDSA (Elliptic Curve Digital Signature Algorithm) używa kryptografii krzywych eliptycznych — klucz 256-bit (P-256) oferuje bezpieczeństwo porównywalne z RSA 3072-bit, ale jest kilkakrotnie szybszy. Większość nowoczesnych serwerów i CDN wspiera ECDSA. Dla maksymalnej kompatybilności (starsze systemy, Java 6) zostań przy RSA 2048+.
Co to jest CSR i do czego jest potrzebny? +
CSR (Certificate Signing Request) to plik zawierający klucz publiczny i informacje o podmiocie (CN, O, C) podpisane kluczem prywatnym. CSR wysyłasz do CA (Certificate Authority), który weryfikuje twoją tożsamość i wystawia certyfikat SSL. Klucz prywatny nigdy nie opuszcza twojego serwera — CA widzi tylko klucz publiczny z CSR. Dla certyfikatów Let's Encrypt ACME protokół automatycznie generuje CSR — nie musisz robić tego ręcznie.
Czym różni się format PEM od DER i PFX/PKCS12? +
PEM (Privacy Enhanced Mail) to Base64-zakodowany format z nagłówkami -----BEGIN CERTIFICATE----- i -----END CERTIFICATE-----. Jest najczęściej używany przez Linux/Apache/Nginx. DER (Distinguished Encoding Rules) to binarny format PEM — używany przez Java, Android i stare systemy Windows. PFX/PKCS12 to kontener łączący certyfikat + klucz prywatny + opcjonalnie chain CA w jeden plik chroniony hasłem — używany przez Windows IIS, .NET i eksport/import certyfikatów.
Jak sprawdzić ważność certyfikatu SSL z linii komend? +
Z pliku: openssl x509 -in cert.pem -text -noout | grep -A2 "Validity". Ze zdalnego serwera: echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -dates. Automatyczne sprawdzanie wygaśnięcia: openssl s_client -connect example.com:443 2>/dev/null | openssl x509 -noout -checkend 2592000 (sprawdza czy certyfikat wygasa w ciągu 30 dni, exit code 1 jeśli tak).

Sprawdź oferty pasujące do tego scenariusza

Poniżej masz szybkie przejścia do ofert i stron z kodami rabatowymi tam, gdzie są dostępne.