 Autor: [Robert Zasilny](/autorzy/robert-zasilny) Ekspert bezpieczeństwa i compliance · Zweryfikowano Kwiecień 2026

1.  [Strona główna](/) ›
2.  [Baza wiedzy](/baza-wiedzy/) ›
3.  OpenSSL — certyfikaty i konfiguracja

# 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.

Contabo

VPS z pełnym kontrolą nad SSL/TLS i własną PKI infrastrukturą

VPS + root

[Aktywuj rabat →](/out/contabo)

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/contabo)

Mikr.us

Budżetowy VPS do nauki OpenSSL i konfiguracji TLS

Dev/Test

[Aktywuj rabat →](/out/mikrus)

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/mikrus)

LH.pl

Hosting z automatycznym SSL Let's Encrypt

Auto SSL

[Aktywuj rabat →](/out/lh-pl)

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/lh-pl)

## Powiązane strony

-   [SSL Let's Encrypt — automatyzacja](/baza-wiedzy/ssl-lets-encrypt-automatyzacja)
-   [Nginx security hardening](/baza-wiedzy/nginx-security-hardening)
-   [Bezpieczeństwo VPS — checklist](/baza-wiedzy/bezpieczenstwo-vps-checklist)
-   [Wszystkie artykuły](/baza-wiedzy/)