$ openssl enc -ciphers Supported ciphers: -aes-128-cbc -aes-128-cfb -aes-128-cfb1 -aes-128-cfb8 -aes-128-ctr -aes-128-ecb -aes-128-ofb -aes-192-cbc -aes-192-cfb -aes-192-cfb1 -aes-192-cfb8 -aes-192-ctr -aes-192-ecb -aes-192-ofb -aes-256-cbc -aes-256-cfb -aes-256-cfb1 -aes-256-cfb8 -aes-256-ctr -aes-256-ecb -aes-256-ofb -aes128 -aes128-wrap -aes128-wrap-pad -aes192 -aes192-wrap -aes192-wrap-pad -aes256 -aes256-wrap -aes256-wrap-pad -aria-128-cbc -aria-128-cfb -aria-128-cfb1 -aria-128-cfb8 -aria-128-ctr -aria-128-ecb -aria-128-ofb -aria-192-cbc -aria-192-cfb -aria-192-cfb1 -aria-192-cfb8 -aria-192-ctr -aria-192-ecb -aria-192-ofb -aria-256-cbc -aria-256-cfb -aria-256-cfb1 -aria-256-cfb8 -aria-256-ctr -aria-256-ecb -aria-256-ofb -aria128 -aria192 -aria256 -bf -bf-cbc -bf-cfb -bf-ecb -bf-ofb -blowfish -camellia-128-cbc -camellia-128-cfb -camellia-128-cfb1 -camellia-128-cfb8 -camellia-128-ctr -camellia-128-ecb -camellia-128-ofb -camellia-192-cbc -camellia-192-cfb -camellia-192-cfb1 -camellia-192-cfb8 -camellia-192-ctr -camellia-192-ecb -camellia-192-ofb -camellia-256-cbc -camellia-256-cfb -camellia-256-cfb1 -camellia-256-cfb8 -camellia-256-ctr -camellia-256-ecb -camellia-256-ofb -camellia128 -camellia192 -camellia256 -cast -cast-cbc -cast5-cbc -cast5-cfb -cast5-ecb -cast5-ofb -chacha20 -des -des-cbc -des-cfb -des-cfb1 -des-cfb8 -des-ecb -des-ede -des-ede-cbc -des-ede-cfb -des-ede-ecb -des-ede-ofb -des-ede3 -des-ede3-cbc -des-ede3-cfb -des-ede3-cfb1 -des-ede3-cfb8 -des-ede3-ecb -des-ede3-ofb -des-ofb -des3 -des3-wrap -desx -desx-cbc -id-aes128-wrap -id-aes128-wrap-pad -id-aes192-wrap -id-aes192-wrap-pad -id-aes256-wrap -id-aes256-wrap-pad -id-smime-alg-CMS3DESwrap -idea -idea-cbc -idea-cfb -idea-ecb -idea-ofb -rc2 -rc2-128 -rc2-40 -rc2-40-cbc -rc2-64 -rc2-64-cbc -rc2-cbc -rc2-cfb -rc2-ecb -rc2-ofb -rc4 -rc4-40 -rc5-cbc -rc5-cfb -rc5-ecb -rc5-ofb -seed -seed-cbc -seed-cfb -seed-ecb -seed-ofb
$ echo "Üzenet" > uzenet.txt $ openssl enc -in uzenet.txt -out titkositott_uzenet.enc -k 12345678 $ cat titkositott_uzenet.enc Üzenet
$ openssl enc -aes-256-ecb -in uzenet.txt -out titkositott_uzenet.enc -k 12345678 *** WARNING : deprecated key derivation used. Using -iter or -pbkdf2 would be better. $ cat titkositott_uzenet.enc ��-TX]���� $ openssl enc -aes-256-ecb -pbkdf2 -in uzenet.txt -out titkositott_uzenet.enc -k 12345678 $ cat titkositott_uzenet.enc Salted__��l]�����s���)<�ū��
$ openssl enc -d -aes-256-ecb -pbkdf2 -in titkositott_uzenet.enc -k 12345678 Üzenet
Kulcs létrehozása:
openssl genpkey -algorithm RSA -out ca-rsa-key.pem -pkeyopt rsa_keygen_bits:2048
Önaláírt tanúsítvány létrehozása:
$ openssl req -key ca-rsa-key.pem -new -x509 -days 365000 -subj '/O=EXAMPLE/OU=Teszt RSA CA' -out ca-rsa-cert.pem
Paraméterek létrehozása:
$ openssl genpkey -genparam -algorithm DSA -out dsa-params.pem -pkeyopt dsa_paramgen_bits:2048
Kulcs létrehozása:
$ openssl genpkey -paramfile dsa-params.pem -out ca-dsa-key.pem
A kulcs létrehozható egyetlen utasítással:
openssl genpkey -paramfile <(openssl genpkey -genparam -algorithm DSA -pkeyopt dsa_paramgen_bits:2048) -out ca-dsa-key.pem
Önaláírt tanúsítvány létrehozása:
openssl req -key ca-dsa-key.pem -new -x509 -days 365000 -subj '/O=EXAMPLE/OU=Teszt DSA CA' -out ca-dsa-cert.pem
Paraméterek létrehozása:
$ openssl genpkey -genparam -algorithm DSA -out dsa-params.pem -pkeyopt dsa_paramgen_bits:2048
Kulcs létrehozása:
openssl genpkey -algorithm EC -out ca-ec-key.pem -pkeyopt ec_paramgen_curve:prime256v1
Önaláírt tanúsítvány létrehozása:
openssl req -key ca-ec-key.pem -new -x509 -days 365000 -subj '/O=EXAMPLE/OU=Teszt EC CA' -out ca-ec-cert.pem
Ha egy utasításban szeretnénk létrehozni, akkor a következő utasítások használhatók:
RSA:
openssl req -newkey rsa:2048 -noenc -keyout ca-rsa-key.pem -new -x509 -days 365000 -subj '/O=EXAMPLE/OU=Teszt RSA CA' -out ca-rsa-cert.pem
DSA:
openssl req -newkey dsa:<(openssl genpkey -genparam -algorithm DSA -pkeyopt dsa_paramgen_bits:2048) -noenc -keyout ca-dsa-key.pem -new -x509 -days 365000 -subj '/O=EXAMPLE/OU=Teszt DSA CA' -out ca-dsa-cert.pem
EC:
openssl req -newkey ec:<(openssl ecparam -name prime256v1) -noenc -keyout ca-ec-key.pem -new -x509 -days 365000 -subj '/O=EXAMPLE/OU=Teszt EC CA' -out ca-ec-cert.pem
RSA szerver tanúsítvány kérelem létrehozása:
openssl req -newkey rsa:2048 -noenc -keyout server-rsa-key.pem -new -subj '/CN=server1' -out server-rsa-req.pem
EC szerver tanúsítvány kérelem létrehozása:
openssl req -newkey ec:<(openssl ecparam -name prime256v1) -noenc -keyout server-ec-key.pem -new -subj '/CN=server1' -out server-ec-req.pem
Szerver tanúsítvány kérelem aláírása RSA alapú tanúsítványkiadóval:
openssl x509 -req -in server-rsa-req.pem -CA ca-rsa-cert.pem -CAkey ca-rsa-key.pem -CAcreateserial -out server-rsa-cert.pem -days 36500 -extfile <(printf "subjectAltName = DNS:example.hu, IP:127.0.0.1\nkeyUsage = digitalSignature, keyEncipherment\nextendedKeyUsage = serverAuth")
Tanúsítvány ellenőrzése:
$ openssl x509 -in server-rsa-cert.pem -noout -startdate -enddate -issuer -subject -ext subjectAltName,keyUsage,extendedKeyUsage
notBefore=Jun 27 09:21:53 2025 GMT
notAfter=Jun 3 09:21:53 2125 GMT
issuer=O=EXAMPLE, OU=Teszt RSA CA
subject=CN=server1
X509v3 Subject Alternative Name:
DNS:example.hu, IP Address:127.0.0.1
X509v3 Key Usage:
Digital Signature, Key Encipherment
X509v3 Extended Key Usage:
TLS Web Server Authentication
Szerver tanúsítvány kérelem aláírása EC alapú tanúsítványkiadóval:
openssl x509 -req -in server-rsa-req.pem -CA ca-ec-cert.pem -CAkey ca-ec-key.pem -CAcreateserial -out server-ec-cert.pem -days 36500 -extfile <(printf "subjectAltName = DNS:example.hu, IP:127.0.0.1\nkeyUsage = digitalSignature, keyEncipherment\nextendedKeyUsage = serverAuth")
Tanúsítvány ellenőrzése:
openssl x509 -in server-ec-cert.pem -noout -startdate -enddate -issuer -subject -ext subjectAltName,keyUsage,extendedKeyUsage
notBefore=Jun 27 09:20:19 2025 GMT
notAfter=Jun 3 09:20:19 2125 GMT
issuer=O=EXAMPLE, OU=Teszt EC CA
subject=CN=server1
X509v3 Subject Alternative Name:
DNS:example.hu, IP Address:127.0.0.1
X509v3 Key Usage:
Digital Signature, Key Encipherment
X509v3 Extended Key Usage:
TLS Web Server Authentication
RSA:
openssl req -newkey rsa:2048 -noenc -keyout client-rsa-key.pem -new -subj '/CN=Teszt Elek/mail=teszt.elek@example.com' -out client-rsa-req.pem
EC:
openssl req -newkey ec:<(openssl ecparam -name prime256v1) -noenc -keyout client-ec-key.pem -new -subj '/CN=Teszt Elek/mail=teszt.elek@example.com' -out client-ec-req.pem
RSA:
$ openssl x509 -req -in client-rsa-req.pem -CA ca-rsa-cert.pem -CAkey ca-rsa-key.pem -CAcreateserial -out client-rsa-cert.pem -days 36500 -extfile <(printf "keyUsage = digitalSignature, keyEncipherment\nextendedKeyUsage = clientAuth") Certificate request self-signature ok subject=CN=Teszt Elek, mail=teszt.elek@example.com
RSA:
$ openssl rsa -in client-rsa-key.pem -noout -modulus | md5sum d966c3260370c2067d74155b0b3112ac - $ openssl x509 -in client-rsa-cert.pem -noout -modulus | md5sum d966c3260370c2067d74155b0b3112ac -
A két ellenőrző összeg megegyezik, a kulcs és a tanúsítvány összetartozik.
EC:
$ openssl ec -in ca-ec-key.pem -pubout | md5sum read EC key writing EC key d26480c8f24e47268004cc3f5a6958bb - $ openssl x509 -in ca-ec-cert.pem -noout -pubkey | md5sum d26480c8f24e47268004cc3f5a6958bb -
A két ellenőrző összeg megegyezik, a kulcs és a tanúsítvány összetartozik.
A PKCS12 formátum (kiterjesztés: .pfx, .p12) titkos kulcs és tanúsítvány tárolására használható. A tároló export/import műveleteihez jelszót kell megadni.
Becsomagolás:
$ openssl pkcs12 -export -in client-rsa-cert.pem -inkey client-rsa-key.pem -CAfile ca-rsa-cert.pem -out client-rsa.p12 -passout pass:12345678
Kicsomagolás:
Csak a privát kulcs:
$ openssl pkcs12 -in client-rsa.p12 -nocerts -noenc -passin pass:12345678
Csak a tanúsítványok:
$ openssl pkcs12 -in client-rsa.p12 -nokeys -noenc -passin pass:12345678
További információk:
A PKCS7 formátum (kiterjesztés: .p7b vagy .p7c) tanúsítványokat tartalmaznak (DER vagy PEM formában). Titkos kulcsot nem tartalmazhatnak! Általában tanúsítványláncok (root vagy intermediate) tárolására használjuk. A .p7b DER formátumú, Windows környezetben, a .p7c PEM formátumú, inkább UNIX környezetben használjuk.
Becsomagolás:
$ openssl crl2pkcs7 -nocrl -certfile ca-rsa-cert.pem -certfile ca-dsa-cert.pem -certfile ca-ec-cert.pem -out ca-chain.p7b -outform DER $ openssl crl2pkcs7 -nocrl -certfile ca-rsa-cert.pem -certfile ca-dsa-cert.pem -certfile ca-ec-cert.pem -out ca-chain.p7c -outform PEM
Kicsomagolás:
$ openssl pkcs7 -inform DER -in ca-chain.p7b -print_certs ___ subject=O=EXAMPLE, OU=Teszt RSA CA issuer=O=EXAMPLE, OU=Teszt RSA CA -----BEGIN CERTIFICATE----- MIIDLzCCAhegAwIBAgIUWGRMI4xJNXGystYJY1MiuLY5qHAwDQYJKoZIhvcNAQEL BQAwJjENMAsGA1UECgwEQVVESTEVMBMGA1UECwwMVGVzenQgUlNBIENBMCAXDTI1 MDYyNzA5MDAwMVoYDzMwMjQxMDI4MDkwMDAxWjAmMQ0wCwYDVQQKDARBVURJMRUw EwYDVQQLDAxUZXN6dCBSU0EgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK ___ $ openssl pkcs7 -inform PEM -in ca-chain.p7c -print_certs ___ subject=O=EXAMPLE, OU=Teszt RSA CA issuer=O=EXAMPLE, OU=Teszt RSA CA -----BEGIN CERTIFICATE----- MIIDLzCCAhegAwIBAgIUWGRMI4xJNXGystYJY1MiuLY5qHAwDQYJKoZIhvcNAQEL BQAwJjENMAsGA1UECgwEQVVESTEVMBMGA1UECwwMVGVzenQgUlNBIENBMCAXDTI1 MDYyNzA5MDAwMVoYDzMwMjQxMDI4MDkwMDAxWjAmMQ0wCwYDVQQKDARBVURJMRUw EwYDVQQLDAxUZXN6dCBSU0EgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK ___
PEM - DER
$ openssl x509 -inform PEM -in client-rsa-cert.pem -outform DER -out client-rsa-cert.cer
DER – PEM
$ openssl x509 -inform DER -in client-rsa-cert.cer -outform PEM -out client-rsa-cert.crt
A szerver oldalon telepíteni kell a httpd és a mod_ssl csomagokat. Az engedélyezett kliensek tanúsítványkiadójának CA tanúsítványát hozzá kell adni a /etc/pki/tls/certs/client-ca-chain.crt állományhoz. Amennyiben több tanúsítványkiadót szeretnénk engedélyezni, akkor mindegyik tanúsítványt be kell másolni a fájlba.
Módosítani kell a /etc/httpd/conf.d/ssl.conf állományt az alábbiak szerint:
# diff /etc/httpd/conf.d/ssl.conf.orig /etc/httpd/conf.d/ssl.conf 124c124 < #SSLCACertificateFile /etc/pki/tls/certs/ca-bundle.crt --- > SSLCACertificateFile /etc/pki/tls/certs/client-ca-chain.crt 131,132c131,132 < #SSLVerifyClient require < #SSLVerifyDepth 10 --- > SSLVerifyClient require > SSLVerifyDepth 10
Az apache szerver újraindítása után csak kliens tanúsítvánnyal lehet hozzáférni az oldalakhoz.
Tesztelés:
$ openssl s_client -connect 192.168.110.11:443 Connecting to 192.168.110.11 CONNECTED(00000003) --- Acceptable client certificate CA names O=EXAMPLE, OU=Teszt RSA CA O=EXAMPLE, OU=Teszt EC CA --- C042A0470F7F0000:error:0A00045C:SSL routines:ssl3_read_bytes:tlsv13 alert certificate required:ssl/record/rec_layer_s3.c:909:SSL alert number 116
Megadjuk a kliens tanúsítványt:
$ openssl s_client -connect 192.168.110.11:443 -cert ~/client-rsa-cert.pem -key ~/client-rsa-key.pem
Connecting to 192.168.110.11
CONNECTED(00000003)
---
Acceptable client certificate CA names
O=EXAMPLE, OU=Teszt RSA CA
O=EXAMPLE, OU=Teszt EC CA
---
Verify return code: 19 (self-signed certificate in certificate chain)
Megadjuk a kliens tanúsítványát és elfogadjuk a szerver root-ca állományát:
$ openssl s_client -connect 192.168.110.11:443 -cert ~/client-rsa-cert.pem -key ~/client-rsa-key.pem -CAfile ~/root-ca.pem
Connecting to 192.168.110.11
CONNECTED(00000003)
---
Acceptable client certificate CA names
O=EXAMPLE, OU=Teszt RSA CA
O=EXAMPLE, OU=Teszt EC CA
---
Verify return code: 0 (ok)