Základy práce s OpenSSL - kontrola SSL a testování výkonu

20. 9. 2013 | Jindřich Zechmeister

V druhé části našeho miniseriálu si ukážeme, jak OpenSSL využít pro kontrolu SSL na serveru a otestování výkonu. Můžete si například zkontrolovat funkčnost SSL certifikátu, nebo provést test výkonu (benchmark) serveru a test počtu spojení na server.

Kontrola SSL certifikátu na serveru

Přítomnost a funkčnost SSL certifikátu na serveru se obvykle kontroluje návštěvou v prohlížeči. Tento postup však nedokáže odhalit technické detaily, zejména informace o chainu SSL certifikátu a přítomnosti Intermediate certifikátů.

Připojení OpenSSL na server se provádí parametrem s_client a -connect, ve kterém je specifikovaná ověřovaná doména a její port. Standardně je pro HTTPS vyhrazen port 443.

Pro parametr -connect je dostupných mnoho voleb, zmíním alespoň ty nejdůležitější:

  • -connect host:port - již zmíněná definice domény a portu, na který se má OpenSSL připojit
  • -cert certname - pokud server vyžaduje certifikát, specifikujte ho zde
  • -showcerts - místo samotného certifikátu zobrazí všechny v chainu
  • -ssl2, -ssl3, -tls1, -no_ssl2, -no_ssl3, -no_tls1 - příslušné protokoly nebudou použity
  • -sess_out filename - uloží session do souboru

Kontrola SSL certifikátu na serveru

Do OpenSSL zadejte příkaz:

openssl s_client -connect www.sslmarket.cz:443

Po zadání příkazu se OpenSSL na server připojí a vypíše detaily certifikátu. Jako první vypíše nejvyšší SSL certifikát v chainu, tedy kořenový. Od něj pochází důvěryhodnost certifikátu.

cechi@debian:~$ openssl s_client -connect www.sslmarket.cz:443
CONNECTED(00000003)
depth=2 C = US, O = "VeriSign, Inc.", OU = VeriSign Trust Network, OU = "(c) 2006 VeriSign, Inc. - For authorized use only", CN = VeriSign Class 3 Public Primary Certification Authority - G5
verify error:num=20:unable to get local issuer certificate
verify return:0

Kontrola chainu a intermediate certifikátů

Dále OpenSSL vypíše detail chainu certifikátu. Jedná se o řetěz napojení vašeho certifikát na certifikáty CA, která váš certifikát vystavila. Certifikátům "uprostřed" se říká Intermediate certifikáty, úplně nejvýše je potom kořenový certifikát. Návštěvníkům stačí k důvěryhodnosti certifikátu pouze kořenový.

Certificate chain
0 s:/1.3.6.1.4.1.311.60.2.1.3=CZ/businessCategory=Private Organization/serialNumber=49437381/C=CZ/ST=Brno/L=Brno/O=ZONER a.s./OU=Internet/OU=Terms of use at www.verisign.com/rpa (c)05/CN=www.sslmarket.cz
i:/C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=Terms of use at https://www.verisign.com/rpa (c)06/CN=VeriSign Class 3 Extended Validation SSL CA
1 s:/C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=Terms of use at https://www.verisign.com/rpa (c)06/CN=VeriSign Class 3 Extended Validation SSL CA
i:/C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=(c) 2006 VeriSign, Inc. - For authorized use only/CN=VeriSign Class 3 Public Primary Certification Authority - G5
2 s:/C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=(c) 2006 VeriSign, Inc. - For authorized use only/CN=VeriSign Class 3 Public Primary Certification Authority - G5
i:/C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority
---

Aby byla důvěryhodnost vašeho SSL certifikátu zachována, musí být na serveru přítomny Intermediate certifikáty autority a chain musí být kompletní. Pokud tak není, nemůže prohlížeč ověřit platnost certifikátu ve vztahu k autoritě a nemůže mu důvěřovat.

Při problémech s Intermediate certifikátem a důvěryhodností SSL certifikátu doporučuji využít právě OpenSSL, které poskytuje nejrelevantnější výsledky. Běžné webové SSL ověřovače zdaleka nejsou tak přesné.

Kontrola SSL certifikátu

Dále následuje samotný SSL certifikát ve formátu Base64. Formát slouží k převodu binárních dat do textových (tisknutelných) znaků. Certifikáty se v této textové podobě běžně používají, a dorazí takto i váš certifikát od SSLmarketu. Můžete tedy certifikáty porovnat.

Server certificate
-----BEGIN CERTIFICATE-----
ZKRÁCENO
-----END CERTIFICATE-----
subject=/1.3.6.1.4.1.311.60.2.1.3=CZ/businessCategory=Private Organization/serialNumber=49437381/C=CZ/ST=Brno/L=Brno/O=ZONER a.s./OU=Internet/OU=Terms of use at www.verisign.com/rpa (c)05/CN=www.sslmarket.cz
issuer=/C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=Terms of use at https://www.verisign.com/rpa (c)06/CN=VeriSign Class 3 Extended Validation SSL CA
---
No client certificate CA names sent

Kontrola spojení a šifer

Nakonec jsou zobrazeny detaily spojení a použitého šifrovaní, které bylo domluveno při navazování spojení se serverem (tzv. Handshake).

SSL handshake has read 4557 bytes and written 634 bytes
---
New, TLSv1/SSLv3, Cipher is RC4-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : TLSv1
Cipher : RC4-SHA
Session-ID: C50940E0F47862F40D8F6CC375567EE7D2835369751B562EB2EFE9638A1CA06E
Session-ID-ctx:
Master-Key: 54B14A58AC585533B05AC5F92F0B56BA50A75C28F38108B4F20C3565B21FFAB04732B091F71933E3B7A212
664B6F7948
Key-Arg : None
PSK identity: None
PSK identity hint: None
SRP username: None
TLS session ticket:
0000 - 05 23 51 a7 e0 50 34 dd-1d 7c 5c bb 41 65 3a 55 .#Q..P4..|.Ae:U
0010 - a7 c2 a2 9b df 1d a0 9e-6e 18 b8 59 dc 5e c8 35 ........n..Y.^.5
0020 - f4 5b 6c bf 3d 8a 0c 64-6d e8 7e 5a fc 9c 91 98 .[l.=..dm.~Z....
0030 - 50 2f 36 c0 d0 5a 1e 33-e5 fa df 7f 25 5e ff bb P/6..Z.3....%^..
0040 - 7e 05 0c 49 07 06 ba 9e-05 a0 1a 13 1c 33 2d a1 ~..I.........3-.
0050 - ed d4 53 29 f0 d2 21 9c-d4 94 68 a5 ef 63 7c 61 ..S)..!...h..c|a
0060 - 38 11 0a d1 04 92 47 56-57 9d 87 41 29 30 85 60 8.....GVW..A)0.`
0070 - b1 e1 cc 50 9f c0 25 8a-ad 55 76 a0 7b 81 99 e9 ...P..%..Uv.{...
0080 - d0 8f 05 6d 78 a9 ef 4e-86 d2 c3 4a c0 ac d9 06 ...mx..N...J....
0090 - 81 92 91 e7 6e 82 27 f1-e6 85 9f 04 41 c6 c5 75 ....n.'.....A..u
00a0 - d0 21 d0 bc 98 3d 42 19-15 52 5f 1f 09 98 b4 cb .!...=B..R_.....
00b0 - 11 81 7d e2 9c 01 3d 70-4e 49 af 31 82 26 3e ee ..}...=pNI.1.&>.

Start Time: 1379682779
Timeout : 300 (sec)
Verify return code: 20 (unable to get local issuer certificate)

Testy rychlostí (benchmarking)

S pomocí OpenSSL můžete na vašem serveru otestovat výkon šifrování serveru a též otestovat počet SSL/TLS spojení na server.

Test rychlosti šifrovacích algoritmů

Test rychlosti jednotlivých šifrovacích algoritmů najdete pod příkazem speed. Jako parametr uvedete šifrovací algoritmus a OpenSSL server otestuje v rychlosti jeho použití.

Použití a možné parametry příkazu speed jsou následující:

openssl speed [-engine id] [md2] [mdc2] [md5] [hmac] [sha1] [rmd160] [idea-cbc] [rc2-cbc] [rc5-cbc] [bf-cbc] [des-cbc] [des-ede3] [rc4] [rsa512] [rsa1024] [rsa2048] [rsa4096] [dsa512] [dsa1024] [dsa2048] [idea] [rc2] [des] [rsa] [blowfish]

Pokud spustíte příkaz bez parametrů, otestuje všechny algoritmy, které jsou k dispozici.

Pro srovnání uvádím výsledku testu tří délek RSA klíče na dvou strojích. Prvním z nich je VPS s jedním procesorovým vláknem, druhé je Core 2 duo v kancelářském PC a třetí Intel Core i7 3770K. U všech tří CPU bylo využito jen jedno vlákno a všech případech běželo OpenSSL na Debianu.

VPS (1 CPU vlákno) PC C2D 2,66 GHz PC Intel i7 3770K
Délka klíče sign/s verify/s Délka klíče sign/s verify/s Délka klíče sign/s verify/s
1024b 2032,7 32363,6 1024b 593,3 11468,2 1024b 6865.8 99855.1
2048b 330,1 11576,5 2048b 85,7 2977,9 2048b 932 30265.1
4096b 51,1 3169,9 4096b 12,9 810,9 4096b 129.5 8144.9

Srovnání výkonu RSA na třech CPU

Test vzdáleného spojení

Parametrem s_time můžete otestovat výkon serveru při vyřizování požadavků. Funkce s_time se pokusí udělat maximální možný počet spojení v 30 sekundách; výsledkem je počet navázaných spojení včetně SSL handshake a jejich čas. Test vzdáleného spojení provedeme parametrem s_time a můžeme ho doplnit parametry, které mají stejný význam, jak výše zmíněné.

openssl s_time [-connect host:port] [-www page] [-cert filename] [-key filename] [-verify depth] [-time seconds] [-ssl2] [-ssl3]

Z výsledků benchmarku můžete posoudit výkon serveru a můžeme tyto informace použít pro ladění a optimalizaci.

V příštím díle našeho miniseriálu o OpenSSL si ukážeme, jak program použít pro šifrování a podepisování dat, vytváření a ověřování hashů a další užitečné úkoly.


Ing. Jindřich Zechmeister
Specialista pro bezpečnostní SSL certifikáty
DigiCert TLS/SSL Professional
e-mail: jindrich.zechmeister(at)zoner.cz