O OpenSSL pode atuar como um proxy SSL entre o servidor e um servidor que não suporte SSL. Para criar um certificado auto-assinado:
$ openssl req -x509 -newkey rsa:2048 -keyout chave.pem -out certificado.pem -days 365 -nodesE para iniciar o servidor SSL:
$ openssl s_server -key chave.pem -cert certificado.pem -accept 44330 -wwwAgora, você está terá um Servidor SSL sendo executado pela própria ferramenta openssl. Para verificar a conexão, pode ser usado o cliente ssl:
$ openssl s_client -connect localhost:44330depth=0 C = BR, ST = ES, L = Vila Velha, O = Internet, OU = Informatica, CN = guiafoca.org, emailAddress = gleydson@guiafoca.org verify error:num=18:self signed certificate
Quando está depurando um problema dificil, e precisa de alguma forma de te ajudar a entender o que está ocorrendo de errado, eis que aparece novamente o canivete suiço openssl. Ele te auxiliará a entender o que está ocorrendo de errado, mesmo quando o problema ocorrer em um fluxo DevOps ou ferramenta automatizada. O openssl pode ser o que precisa para fazer a depuração:
Para conectar em um servidor usando a ferramenta openssl:
openssl s_client -connect www.terra.com.br:443CONNECTED(00000003) depth=2 O = Digital Signature Trust Co., CN = DST Root CA X3 verify return:1 depth=1 C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3 verify return:1 depth=0 CN = guiafoca.org verify return:1 --- Certificate chain 0 s:CN = guiafoca.org i:C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3 1 s:C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3 i:O = Digital Signature Trust Co., CN = DST Root CA X3 --- Server certificate -----BEGIN CERTIFICATE----- MIIFYjCCBEqgAwIBAgISBJ4tiXeoEMBd4GkU3uKR4AKFMA0GCSqGSIb3DQEBCwUA MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0yMDA2MDIxMTU0MDFaFw0y MDA4MzExMTU0MDFaMBcxFTATBgNVBAMTDGd1aWFmb2NhLm9yZzCCASIwDQYJKoZI hvcNAQEBBQADggEPADCCAQoCggEBAL3QP1H9r0/ulOb0RNHkQ5oyu3lxKAG6lNqL Xpw8ITe8hBoOg+mDPcOhnZOgPys6ucMZ0jdgsIfU3oQM0cM+djWNyHpvF0BD9dKL yZA2fZgUQDZKdxS5w+RVw3oVdSxcSgCGDozAQSwqpd3oroGyZ2GkKO17s4/SanVA 6ReIkenzG1Hg7hEJJDvaPnzWVcKNh/scNEyMsnE0OXYbVAjr16Ff7EkMVu+B/5gO x92cxkeKmOfqzvW3pnpkhhTFJVA6svCSpJp4fouxHK3DRguU60j2hMGABz9Gb46H xrhOLrcid10TTrviHck6cPHwF6wwhyVEoQChbHDwebSTESkzrbECAwEAAaOCAnMw ggJvMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUH AwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUQsysavyg8sJPqUIayfBlOhfMjUYw HwYDVR0jBBgwFoAUqEpqYwR93brm0Tm3pkVl7/Oo7KEwbwYIKwYBBQUHAQEEYzBh MC4GCCsGAQUFBzABhiJodHRwOi8vb2NzcC5pbnQteDMubGV0c2VuY3J5cHQub3Jn MC8GCCsGAQUFBzAChiNodHRwOi8vY2VydC5pbnQteDMubGV0c2VuY3J5cHQub3Jn LzApBgNVHREEIjAgggxndWlhZm9jYS5vcmeCEHd3dy5ndWlhZm9jYS5vcmcwTAYD VR0gBEUwQzAIBgZngQwBAgEwNwYLKwYBBAGC3xMBAQEwKDAmBggrBgEFBQcCARYa aHR0cDovL2Nwcy5sZXRzZW5jcnlwdC5vcmcwggEEBgorBgEEAdZ5AgQCBIH1BIHy APAAdgDnEvKwN34aYvuOyQxhhPHqezfLVh0RJlvz4PNL8kFUbgAAAXJ1GIayAAAE AwBHMEUCIQCtrH4CxUi8/9Az+yjXfaAs5zt2qMldNNWFfH/sy2ruagIgGnnOKp+y 1b64brS04pL4cCXakjkNnluqR2HHPjUdQKkAdgAHt1wb5X1o//Gwxh0jFce65ld8 V5S3au68YToaadOiHAAAAXJ1GIb4AAAEAwBHMEUCIQDqLLTizQQRkF6hN3IPVsDF x3W2JeaiVc2v4XZFcF8BFgIgPrKYGiBpY5Hiykq0szjwFYaUApOb8z3NNM4Sxqtj rbEwDQYJKoZIhvcNAQELBQADggEBAFb20LagN6e1bcc1wwa9qkaKXr8xG2x78I6t FsfuruSbOVZWUIQDsJhKuZFH84gKnsqzI46k7u04DTYuD2BGnu+9UhUyTHU306CZ cJPzTqHesgo3ir/D8uZGPU3D6Dhv4rfJPIsJAdOKdbayhpiaWn46XvD0xwOAJspF zNTWYWEatIx52wAW3vQ0D7h/6mWslPQJzpDp/crJk/2hsVUov8NqYTNkqHFR3vlS zbn3Oi4Rs6K9nDLXFjPYY7OXtebLj3aXafHo/KtBtjPX8DfZFv0FSNHb1Iu9Yn38 XdQGYAk1hP2/sFSqiNJjwkt040gsARCR4OdypuuV7OrsqTJCujM= -----END CERTIFICATE----- subject=CN = guiafoca.org issuer=C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3 --- No client certificate CA names sent Peer signing digest: SHA256 Peer signature type: RSA-PSS Server Temp Key: X25519, 253 bits --- SSL handshake has read 3121 bytes and written 388 bytes Verification: OK --- New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384 Server public key is 2048 bit Secure Renegotiation IS NOT supported Compression: NONE Expansion: NONE No ALPN negotiated Early data was not sent Verify return code: 0 (ok) ---
Caso ele reclamar de um certificado auto-assinado (self-signed), utilize o parametro
-CAfile
para indicar um arquivo de CA para leitura:
Agora, com o cliente conectado, você poderá executar os seguintes comandos:
q - Finaliza a coexão SSL mas ainda aceita novas conexões
Q - Finaliza a conexão SSL atual e encerra.
r - Renegocia a conexão SSL
R - Renegocia a sessão SSL e requisita um certificado de cliente.
P - Envia algum texto plano na conexão TCP: isto deve fazer o cliente desconectar devido a violação de protocolo.
S - Mostra dados de utilização do cache de status.
É possível também analisar a cadeia de segurança do certificado SSL sendo testado com a ferramenta openssl. Ainda continuando a análise do comando: openssl s_client -connect www.terra.com.br:443:
Certificate chain 0 s:CN = guiafoca.org i:C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3 1 s:C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3 i:O = Digital Signature Trust Co., CN = DST Root CA X3
Mostra a relação entre issuer e subject no certificado. Caso aparecerem números longos hexadecimais no subject, significa que o OpenSSL não possui o OID em sua base de mapeamento, exibindo o hexadecimal em seu lugar. Os OIDS são únicos e identificações que não se repetem, usados entre outras coisas para validação de certificados de validação extendida (EV).
Por padrão o openssl mostra apenas o certificado final. Caso deseje mostrar toda a cadeia, use a opção -showcerts: echo Q | openssl s_client -connect www.guiafoca.org:443 -showcerts
CONNECTED(00000003) depth=2 O = Digital Signature Trust Co., CN = DST Root CA X3 verify return:1 depth=1 C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3 verify return:1 depth=0 CN = guiafoca.org verify return:1 --- Certificate chain 0 s:CN = guiafoca.org i:C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3 -----BEGIN CERTIFICATE----- MIIFYjCCBEqgAwIBAgISBJ4tiXeoEMBd4GkU3uKR4AKFMA0GCSqGSIb3DQEBCwUA MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0yMDA2MDIxMTU0MDFaFw0y MDA4MzExMTU0MDFaMBcxFTATBgNVBAMTDGd1aWFmb2NhLm9yZzCCASIwDQYJKoZI hvcNAQEBBQADggEPADCCAQoCggEBAL3QP1H9r0/ulOb0RNHkQ5oyu3lxKAG6lNqL Xpw8ITe8hBoOg+mDPcOhnZOgPys6ucMZ0jdgsIfU3oQM0cM+djWNyHpvF0BD9dKL yZA2fZgUQDZKdxS5w+RVw3oVdSxcSgCGDozAQSwqpd3oroGyZ2GkKO17s4/SanVA 6ReIkenzG1Hg7hEJJDvaPnzWVcKNh/scNEyMsnE0OXYbVAjr16Ff7EkMVu+B/5gO x92cxkeKmOfqzvW3pnpkhhTFJVA6svCSpJp4fouxHK3DRguU60j2hMGABz9Gb46H xrhOLrcid10TTrviHck6cPHwF6wwhyVEoQChbHDwebSTESkzrbECAwEAAaOCAnMw ggJvMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUH AwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUQsysavyg8sJPqUIayfBlOhfMjUYw HwYDVR0jBBgwFoAUqEpqYwR93brm0Tm3pkVl7/Oo7KEwbwYIKwYBBQUHAQEEYzBh MC4GCCsGAQUFBzABhiJodHRwOi8vb2NzcC5pbnQteDMubGV0c2VuY3J5cHQub3Jn MC8GCCsGAQUFBzAChiNodHRwOi8vY2VydC5pbnQteDMubGV0c2VuY3J5cHQub3Jn LzApBgNVHREEIjAgggxndWlhZm9jYS5vcmeCEHd3dy5ndWlhZm9jYS5vcmcwTAYD VR0gBEUwQzAIBgZngQwBAgEwNwYLKwYBBAGC3xMBAQEwKDAmBggrBgEFBQcCARYa aHR0cDovL2Nwcy5sZXRzZW5jcnlwdC5vcmcwggEEBgorBgEEAdZ5AgQCBIH1BIHy APAAdgDnEvKwN34aYvuOyQxhhPHqezfLVh0RJlvz4PNL8kFUbgAAAXJ1GIayAAAE AwBHMEUCIQCtrH4CxUi8/9Az+yjXfaAs5zt2qMldNNWFfH/sy2ruagIgGnnOKp+y 1b64brS04pL4cCXakjkNnluqR2HHPjUdQKkAdgAHt1wb5X1o//Gwxh0jFce65ld8 V5S3au68YToaadOiHAAAAXJ1GIb4AAAEAwBHMEUCIQDqLLTizQQRkF6hN3IPVsDF x3W2JeaiVc2v4XZFcF8BFgIgPrKYGiBpY5Hiykq0szjwFYaUApOb8z3NNM4Sxqtj rbEwDQYJKoZIhvcNAQELBQADggEBAFb20LagN6e1bcc1wwa9qkaKXr8xG2x78I6t FsfuruSbOVZWUIQDsJhKuZFH84gKnsqzI46k7u04DTYuD2BGnu+9UhUyTHU306CZ cJPzTqHesgo3ir/D8uZGPU3D6Dhv4rfJPIsJAdOKdbayhpiaWn46XvD0xwOAJspF zNTWYWEatIx52wAW3vQ0D7h/6mWslPQJzpDp/crJk/2hsVUov8NqYTNkqHFR3vlS zbn3Oi4Rs6K9nDLXFjPYY7OXtebLj3aXafHo/KtBtjPX8DfZFv0FSNHb1Iu9Yn38 XdQGYAk1hP2/sFSqiNJjwkt040gsARCR4OdypuuV7OrsqTJCujM= -----END CERTIFICATE----- 1 s:C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3 i:O = Digital Signature Trust Co., CN = DST Root CA X3 -----BEGIN CERTIFICATE----- MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/ MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT DkRTVCBSb290IENBIFgzMB4XDTE2MDMxNzE2NDA0NloXDTIxMDMxNzE2NDA0Nlow SjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzAhBgNVBAMT GkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzMIIBIjANBgkqhkiG9w0BAQEFAAOC AQ8AMIIBCgKCAQEAnNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EF q6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8 SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0 Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWA a6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj /PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3DkwIDAQABo4IBfTCCAXkwEgYDVR0T AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEEczBxMDIG CCsGAQUFBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc3AuaWRlbnRydXN0LmNv bTA7BggrBgEFBQcwAoYvaHR0cDovL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9k c3Ryb290Y2F4My5wN2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAw VAYDVR0gBE0wSzAIBgZngQwBAgEwPwYLKwYBBAGC3xMBAQEwMDAuBggrBgEFBQcC ARYiaHR0cDovL2Nwcy5yb290LXgxLmxldHNlbmNyeXB0Lm9yZzA8BgNVHR8ENTAz MDGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9PVENBWDNDUkwu Y3JsMB0GA1UdDgQWBBSoSmpjBH3duubRObemRWXv86jsoTANBgkqhkiG9w0BAQsF AAOCAQEA3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJo uM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/ wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwu X4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlG PfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6 KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg== -----END CERTIFICATE----- --- Server certificate subject=CN = guiafoca.org issuer=C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3 --- No client certificate CA names sent Peer signing digest: SHA256 Peer signature type: RSA-PSS Server Temp Key: X25519, 253 bits --- SSL handshake has read 3121 bytes and written 388 bytes Verification: OK --- New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384 Server public key is 2048 bit Secure Renegotiation IS NOT supported Compression: NONE Expansion: NONE No ALPN negotiated Early data was not sent Verify return code: 0 (ok) --- DONE
Analisando a saída acima, a parte mais importante é o TLS 1.3 e o cipher suite usado: ECDHE-ECDSA-AES256-GCM-SHA384. Também é possível determinar se o servidor enviou um ID e ticket de sessão TLS
No client certificate CA names sent Peer signing digest: SHA256 Peer signature type: RSA-PSS Server Temp Key: X25519, 253 bits --- SSL handshake has read 3121 bytes and written 388 bytes Verification: OK --- New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384 Server public key is 2048 bit Secure Renegotiation IS NOT supported Compression: NONE Expansion: NONE No ALPN negotiated Early data was not sent Verify return code: 0
Note que para o TLS 1.2 a saída é um pouco diferente, como a abaixo:
--- SSL handshake has read 3966 bytes and written 434 bytes Verification: OK --- New, TLSv1.2, Cipher is ECDHE-RSA-AES256-GCM-SHA384 Server public key is 2048 bit Secure Renegotiation IS supported Compression: NONE Expansion: NONE No ALPN negotiated SSL-Session: Protocol : TLSv1.2 Cipher : ECDHE-RSA-AES256-GCM-SHA384 Session-ID: 645725145319CFB1FE33ECEF9D41AFDA605C34F66266582700742BC1C672E90B Session-ID-ctx: Master-Key: 13464E7438098F2463BCAB0605FF225D5EBA37D438C75161247975A3C787AA7F1729CDA160B4001C032C90A01DAE0C23 PSK identity: None PSK identity hint: None SRP username: None TLS session ticket lifetime hint: 7300 (seconds) TLS session ticket: 0000 - 00 00 0e 86 64 dc a9 6a-66 81 4a 74 ef 81 28 ce ....d..jf.Jt..(. 0010 - 28 b7 a9 41 c5 26 8e e5-b3 a5 3d d0 27 2b 75 59 (..A.....=.'+uY 0020 - 9b 99 8c c7 2b 6e 21 89-22 e4 2a da 50 cc 00 af ....+n!.".*.P... 0030 - b0 c2 2a 8d 22 a4 4a 3f-d7 63 07 9b 30 bc 0e 89 ..*.".J?.c..0... 0040 - 70 70 6a a2 d5 09 10 a7-7a 58 73 88 29 e6 f0 b4 ppj.....zXs.)... 0050 - 0d c4 fa da 14 6f a1 0f-6e 28 b9 2f b1 8a 69 be .....o..n(./..i. 0060 - eb 07 58 21 ce cc 7c ed-3e 99 b6 3d d4 9a 9d 5e ..X!..|.>..=...^ 0070 - dd 10 a3 85 ae ad f6 09-e6 77 20 4e 83 44 a5 7a .........w N.D.z 0080 - f0 c4 79 9c e1 3e 4f 15-22 49 a7 20 d8 d5 e0 47 ..y..>O."I. ...G 0090 - c3 ac 3d 8e 78 e9 d9 0d-e8 fa 75 f7 ac cc f9 2e ..=.x.....u..... 00a0 - 64 9a b3 b8 28 ba 04 e2-f9 a5 0c 07 a1 9d da d3 d...(........... Start Time: 1594518720 Timeout : 7200 (sec) Verify return code: 0 (ok) Extended master secret: no
Quando é usado com o HTTP, o TLS troca toda a comunicação para HTTPS.
Mas alguns protocolos iniciam como texto plano, e eles fazem upgrade para criptografia. Se quiser testar
esse tipod e protocolo, é necessário especificar a opção -starttls
, indicando que
o protocolo pode fazer upgrade por si próprio. :
A saída será a seguinte:
CONNECTED(00000003) depth=2 OU = GlobalSign Root CA - R2, O = GlobalSign, CN = GlobalSign verify return:1 depth=1 C = US, O = Google Trust Services, CN = GTS CA 1O1 verify return:1 depth=0 C = US, ST = California, L = Mountain View, O = Google LLC, CN = mx.google.com verify return:1 --- Certificate chain 0 s:C = US, ST = California, L = Mountain View, O = Google LLC, CN = mx.google.com i:C = US, O = Google Trust Services, CN = GTS CA 1O1 1 s:C = US, O = Google Trust Services, CN = GTS CA 1O1 i:OU = GlobalSign Root CA - R2, O = GlobalSign, CN = GlobalSign --- Server certificate -----BEGIN CERTIFICATE----- MIIHJDCCBgygAwIBAgIRAJI+8dkxpHmxCAAAAABH8A4wDQYJKoZIhvcNAQELBQAw QjELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFUdvb2dsZSBUcnVzdCBTZXJ2aWNlczET MBEGA1UEAxMKR1RTIENBIDFPMTAeFw0yMDA2MTcxNDI5NDZaFw0yMDA5MDkxNDI5 NDZaMGcxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH Ew1Nb3VudGFpbiBWaWV3MRMwEQYDVQQKEwpHb29nbGUgTExDMRYwFAYDVQQDEw1t eC5nb29nbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJ2cnRpnaoWs2 bzNvXchIDzxPpg6MZAgSc8FQwAiRkNXnYJMmuHwkUjcsUBva/ax8SLkO/Ax/Kilp BU187FIGMaOCBLkwggS1MA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEF BQcDATAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBS/odoeByJYt5WTZU/HTnSXg9Vr KzAfBgNVHSMEGDAWgBSY0fhuEOvPm+xgnxiQG6DrfQn9KzBoBggrBgEFBQcBAQRc MFowKwYIKwYBBQUHMAGGH2h0dHA6Ly9vY3NwLnBraS5nb29nL2d0czFvMWNvcmUw KwYIKwYBBQUHMAKGH2h0dHA6Ly9wa2kuZ29vZy9nc3IyL0dUUzFPMS5jcnQwggJ1 BgNVHREEggJsMIICaIINbXguZ29vZ2xlLmNvbYIXYWx0MS5hc3BteC5sLmdvb2ds ZS5jb22CH2FsdDEuZ21haWwtc210cC1pbi5sLmdvb2dsZS5jb22CHWFsdDEuZ21y LXNtdHAtaW4ubC5nb29nbGUuY29tghdhbHQyLmFzcG14LmwuZ29vZ2xlLmNvbYIf YWx0Mi5nbWFpbC1zbXRwLWluLmwuZ29vZ2xlLmNvbYIdYWx0Mi5nbXItc210cC1p bi5sLmdvb2dsZS5jb22CF2FsdDMuYXNwbXgubC5nb29nbGUuY29tgh9hbHQzLmdt YWlsLXNtdHAtaW4ubC5nb29nbGUuY29tgh1hbHQzLmdtci1zbXRwLWluLmwuZ29v Z2xlLmNvbYIXYWx0NC5hc3BteC5sLmdvb2dsZS5jb22CH2FsdDQuZ21haWwtc210 cC1pbi5sLmdvb2dsZS5jb22CHWFsdDQuZ21yLXNtdHAtaW4ubC5nb29nbGUuY29t ghJhc3BteC5sLmdvb2dsZS5jb22CFWFzcG14Mi5nb29nbGVtYWlsLmNvbYIVYXNw bXgzLmdvb2dsZW1haWwuY29tghVhc3BteDQuZ29vZ2xlbWFpbC5jb22CFWFzcG14 NS5nb29nbGVtYWlsLmNvbYIaZ21haWwtc210cC1pbi5sLmdvb2dsZS5jb22CEWdt ci1teC5nb29nbGUuY29tghhnbXItc210cC1pbi5sLmdvb2dsZS5jb22CDW14MS5z bXRwLmdvb2eCDW14Mi5zbXRwLmdvb2eCDW14My5zbXRwLmdvb2eCDW14NC5zbXRw Lmdvb2cwIQYDVR0gBBowGDAIBgZngQwBAgIwDAYKKwYBBAHWeQIFAzAzBgNVHR8E LDAqMCigJqAkhiJodHRwOi8vY3JsLnBraS5nb29nL0dUUzFPMWNvcmUuY3JsMIIB AwYKKwYBBAHWeQIEAgSB9ASB8QDvAHUAsh4FzIuizYogTodm+Su5iiUgZ2va+nDn sklTLe+LkF4AAAFywuaIaAAABAMARjBEAiALLdlXTf//fnFVtu3WnnsDzrnyshIO 6Ika3/12hYaquQIgVwOF3Psb8cx4if4Lr6wvlUshfpM0TspYpjx/b+Fg//QAdgBe p3P531bA57U2SH3QSeAyepGaDIShEhKEGHWWgXFFWAAAAXLC5ohmAAAEAwBHMEUC IQDqLbrAjESKIMs1p78PEwKYgPUdJ108bdsdpeGc/ZqY9QIgd06p3NR46wGcsThR fyoOyC4SMYng3ImFXXW7bFYlcjowDQYJKoZIhvcNAQELBQADggEBAGYdR+ajEHgr 5Dmw5dxTkXm5rTKWxT8RZV4hpj7WS5jd01h8I/IGbafisJA6oij7LvAkcqoH2F3i xPVUt0cRRL4K1LNH146fjvp1tiEevxqXK9rAYRluZw38EvCVIeLrlg0XCIUYBFPS PMt9lZ71yehlB5KnbLEJjchlgQz986lpcvOu8jtJWBzTHe+BFVIjOciEX3Bgb+3F JyVBEWY6DfxIVKd6dyoAhoYVSeZwdfAGZJ6kr6J19oDtX9P18VTrOF5zVsMsHW31 wFubVkS8zKplQBdOa1z2qxENdrYi/T1FkQfW0BfFmBRcx+ObNlL4FZav6gFcb0uZ tk6NlovNPPU= -----END CERTIFICATE----- subject=C = US, ST = California, L = Mountain View, O = Google LLC, CN = mx.google.com issuer=C = US, O = Google Trust Services, CN = GTS CA 1O1 --- No client certificate CA names sent Peer signing digest: SHA256 Peer signature type: ECDSA Server Temp Key: X25519, 253 bits --- SSL handshake has read 3496 bytes and written 431 bytes Verification: OK --- New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384 Server public key is 256 bit Secure Renegotiation IS NOT supported Compression: NONE Expansion: NONE No ALPN negotiated Early data was not sent Verify return code: 0 (ok) --- 250 SMTPUTF8
O upgrade de conexão é suportado para os protocolos SMTP, POP3, IMAP, FTP, e XMPP.
Utilize o seguinte comando do openssl para extrair o certificado de cliente diretamente de um domínio:
$ echo | openssl s_client -connect www.guiafoca.org:443 2>&1 | sed --quiet '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > www.guiafoca.org.crt
Em alguma situações, durante os tests do OpenSSL, suas tentativas podem falhar
(mesmo que saiba que o servidor utiliza TLS, vendo ele funcionando pelo navegador).
Uma possivel causa é quando o servidor não suporta o handshake antigo do SSL 2
.
Como OpenSSL tenta negociar todos os protocolos que conhece e como o
o SSL2
pode ser negociado apenas usando o antigo handshake SSL2, ele
usa este handshake como padrão.
Mesmo que ele esteja associado com um protocolo muito antigo e inseguro, o formato de handshake antigo não é inseguro. Ele suporta upgrades, o que significa que um protocolo melhor pode ser negociado. No entanto, esta formato de handshake não suporta muitas características de conexão que foram criadas após o SSL 2.
Desta forma, para forçar o OpenSSL a usar um novo formato de conexão, faça isso desativando o SSL2 :
openssl s_client -connect www.guiafoca.org:443 -no_ssl2Uma forma alternativa de fazer o mesmo, é especificar o servername na linha de comando:
openssl s_client -connect www.guiafoca.org:443 -servername www.guiafoca.org
A opção -servername [nome]
permite o habilitar a conexão usaando
SNI (Server Name Indicator), o que forçará o uso do novo padrão SSL3.
Por padrão, o openssl s_client tentará usar o melhor protocolo para falar com o servidor remoto e reportará a versão negociada na saída:
Protocol : TLSv1.2
Caso precise testar o suporte a uma versão específica, então você terá duas opções.
Especificar explicitamente qual deseja usar entre as opções: -ssl2, -ssl3, -tls1, -tls1_1, -tls1_2, -tls1_3
Especificar que protocolos você NÂO deseja testar usando uma das opções: -no_ssl2, -no_ssl3, -no_tls1, -no_tls1_1, -no_tls1_2
# Caso o client não suportar a opção, você receberá o retorno:
$ openssl s_client -connect www.guiafoca.org:443 -showcerts -tls1_1 s_client: Option unknown option -tls1_1 s_client: Use -help for summary.
OBS: A versão OpenSSL 1.1.0f
e mais novas,
apenas suportam o TLS e a opção -no_ssl3
.
Caso o servidor não suportar uma versão de protocolo, o seguinte retorno será mostrado:
$ openssl s_client -connect www.guiafoca.org:443 -tls1_2 CONNECTED(00000003) 140455015261856:error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number:s3↩ _pkt.c:340:
A configuração do Cipher é feita ao selecionar os ciphers que deseja usar, mas se especificar somente um conjunto de Ciphers e fizer o handshake com sucesso no servidor, claramente significa que ele suporta o conjunto. Se o handshake falhar, saberá que não tem suporte a àquele conjunto:
Para testar se o o servidor suporta RC4-SHA:
openssl s_client -connect www.guiafoca.org:443 -cipher RC4-SHAPara obter uma lista de todos os tipos suportados por um servidor, inicie com o comando:
# openssl ciphers ALLPara obter uma lista de todos os ciphers ssl suportados por sua versão e envie-os um a um para teste individual, possivelmente usando um script. Observe que você somente pode testar com Ciphers também suportados por sua versão de SSL.
Como o SSL e o TLS inicialmente foram feitos para suportar um website por IP, o SNI é uma extensão do TLS que permite usar mais de um certificado com o mesmo endpoint IP. Isso é importante principalmente para provedores de hospedagem que utilizam IPV4, devido a escassez de endereços IP.
Pra que isso ocorra, o TLS usa a extensão para enviar o nome designado e os servidores TLS utilizam para selecioanr o certificado correto para responder. Em resumo, o SNI permite o uso de hospedagens de forma segura.
Caso tentar conectar sem SNI em servidor com SNI, uma das três coisas acontecerão:
A mais frequente, você receberá o mesmo certificado que obteria caso os dados SNI não forem fornecidos
O servidor reponderá com um certificado diferente do site que fará o teste
Muito raramente, o servidor abortará o handshake e recusará a conexão
Você pode ativar o teste de SNI no s_client
com a
opção -servername
:
Desta forma, a conexão resolvera o IP do parametro passado por -connect
e enviará o nome indicado por -servername
.
Você pode determinar se o site requer SNI testando ele com e sem o parametro -servername
e comparando os resultados. Caso não forem, o SNI é requerido.
Algumas vezes, se o nome requisitado não estiver disponível, o servidor mostrará isso com um alerta TLS:
openssl s_client -connect www.guiafoca.org:443 -servername www.guiadofoca.org CONNECTED(00000003) 1255:error:14077458:SSL routines:SSL23_GET_SERVER_HELLO:reason(1112):s23_clnt.c:596:
O parâmetro -reconnect
faz o teste de reuso de sessão. Neste modo, o
openssl s_client
conectará no destino sez vezes, a primeira será a nova
conexão e tentará reutilizar a conexão nas próximas cinco.
echo | openssl s_client -connect www.guiafoca.org:443 -reconnect
Na primeira:
New, TLSv1.3, Cipher is ECDHE-RSA-AES128-GCM-SHA256 Server public key is 2048 bit
Nas tentativas seguintes:
Reused, TLSv1.3, Cipher is ECDHE-RSA-AES128-GCM-SHA256 Secure Renegotiation IS supported
Caso o reuso de conexão não estiver ativado, você receberá o seguinte retorno:
New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384 Secure Renegotiation IS NOT supported Compression: NONE Expansion: NONE No ALPN negotiated Early data was not sent Verify return code: 0 (ok)
OBS: Para desativar o uso de tickets de sessão, caso o cliente não utilize essa característica, desative com a opção -no_ticket
O OCSP
significa Online Certificate Status Protocol
(Protocolo de status online do Certificado), descrito na RFC2560, ajuda a elevar
a segurança de publicação de certificados, através da verificação do seatus de validade do
certificado.
Se o responder OCSP
estiver com mal funcionamento, geralmente é dificil
entender o porque. A verificação do status da revogação do certificado pela linha
de comando é possível, mas nem sempre fácil. Ela pode ser feita da seguinte forma:
Obtenha um certificado que deseja verifica a revogação
Obtenha o certificado do emissor
Determine a URL do reponder OCSP
Envie uma requisição OCSP e observe a resposta
Para os primeiros dois passos, conecte no servidro com a opção -showcerts como especificado:
openssl s_client -connect www.guiafoca.org:443 -showcerts
Para obter somente o endereço do responder OCSP, utilize o seguinte comando no certificado baixado localmente:
openssl x509 -in fd.crt -noout -ocsp_uriAgora, você poderá enviar a requisição OCSP:
openssl ocsp -issuer issuer.crt -cert fd.crt -url http://www.guiafoca.org/ -CAfile issuer.crt WARNING: no nonce in response Response verify OK fd.crt: good This Update: Feb 18 17:59:10 2020 GMT Next Update: Feb 18 23:59:10 2020 GMT
O OCSP Stapling é um recurso opcional que permite ao certificado do servidor ser acompanhado por uma resposta OCSP que prova sua validade. Porque a resposta OCSP é entregue através de uma conexão existente, o cliente não precisa pega-la separadamente.
O OCSP Stapling é usado somente se requisitado pelo cliente, que envia a extensão status_request em uma requisição handshake. O servidor que suporta o OCSP stapling responderá incluindo uma requisião OCSP como parte do handshake.
Quando utiliza a ferramenta s_client, o OCSP stapling é requisitado com a opção -status:
$ echo | openssl s_client -connect www.guiafoca.org:443 -statusDados relacionados com o OCSP serão mostrados no inicio da conexão de saída. Por exemplo, se o servidor não suportar stapling, você verá essa linha no topo da saída:
CONNECTED(00000003) OCSP response: no response sent
Com um servidor que suporta stapling, você verá a resposta na saída:
OCSP Response Data: OCSP Response Status: successful (0x0) Response Type: Basic OCSP Response Version: 1 (0x0) Responder Id: C = US, O = "GeoTrust, Inc.", CN = RapidSSL OCSP-TGV Responder Produced At: Jan 22 17:48:55 2014 GMT Responses: Certificate ID: Hash Algorithm: sha1 Issuer Name Hash: 534F7A75EAC6542FED58B2BD2B15802865301E0E Issuer Key Hash: 65693D6A18424ADD8F026539FD35248678911630 Serial Number: 0FA476 Cert Status: good This Update: Jan 22 17:48:55 2020 GMT Next Update: Jan 29 17:48:55 2020 GMT [...]
O certificado retornando o status good, indica que ele não foi revogado.
O teste de CRL é bem mais interessante que fazer o mesmo via OCSP. Para fazer a verificação de certificado CRL do servidor, execute os seguintes passos:
Acesse o servidor que possui o certificado .crt
e execute o seguinte
comando:
openssl x509 -in fd.crt -noout -text | grep -A 5 CRL
Obtenha o certificado do emissor
Baixe e verifique a CRL da CA. No caso, faremos um teste usando o RapidSSL: wget -nd http://rapidssl-crl.geotrust.com/crls/rapidssl.crl
Aproveite esta etapa após baixar o CRL e execute uma validação para ter certeza que o certificado é assinado pelo issuer (emissor):
$ openssl crl -in rapidssl.crl -inform DER -CAfile issuer.crt -noout verify OK
Confira se o serial do Certificado está definido na CRL:
openssl x509 -in fd.crt -noout -serial serial=0FA476
Após o procedimento, se desejar visualizar o certificado em formato legível, vamos converter o CRL e analisar seus parâmetros:
openssl crl -in rapidssl.crl -inform DER -text -nooutCertificate Revocation List (CRL): Version 2 (0x1) Signature Algorithm: sha1WithRSAEncryption Issuer: /C=US/O=GeoTrust, Inc./CN=RapidSSL CA Last Update: Jan 25 11:03:00 2014 GMT Next Update: Feb 4 11:03:00 2014 GMT CRL extensions: X509v3 Authority Key Identifier: keyid:6B:69:3D:6A:18:42:4A:DD:8F:02:65:39:FD:35:24:86:78:91:16:30 X509v3 CRL Number: 92103 Revoked Certificates: Serial Number: 0F38D7 Revocation Date: Nov 26 20:07:51 2013 GMT Serial Number: 6F29 Revocation Date: Aug 15 20:48:57 2011 GMT [...] Serial Number: 0C184E Revocation Date: Jun 13 23:00:12 2013 GMT Signature Algorithm: sha1WithRSAEncryption 95:df:e5:59:bc:95:e8:2f:bb:0a:4f:20:ad:ca:8f:78:16:54: 35:32:55:b0:c9:be:5b:89:da:ba:ae:67:19:6e:07:23:4d:5f: 16:18:5c:f3:91:15:da:9e:68:b0:81:da:68:26:a0:33:9d:34: 2d:5c:84:4b:70:fa:76:27:3a:fc:15:27:e8:4b:3a:6e:2e:1c: 2c:71:58:15:8e:c2:7a:ac:9f:04:c0:f6:3c:f5:ee:e5:77:10: e7:88:83:00:44:c4:75:c4:2b:d3:09:55:b9:46:bf:fd:09:22: de:ab:07:64:3b:82:c0:4c:2e:10:9b:ab:dd:d2:cb:0c:a9:b0: 51:7b:46:98:15:83:97:e5:ed:3d:ea:b9:65:d4:10:05:10:66: 09:5c:c9:d3:88:c6:fb:28:0e:92:1e:35:b0:e0:25:35:65:b9: 98:92:c7:fd:e2:c7:cc:e3:b5:48:08:27:1c:e5:fc:7f:31:8f: 0a:be:b2:62:dd:45:3b:fb:4f:25:62:66:45:34:eb:63:44:43: cb:3b:40:77:b3:7f:6c:83:5c:99:4b:93:d9:39:62:48:5d:8c: 63:e2:a8:26:64:5d:08:e5:c3:08:e2:09:b0:d1:44:7b:92:96: aa:45:9f:ed:36:f8:62:60:66:42:1c:ea:e9:9a:06:25:c4:85: fc:77:f2:71
O CRL inicia com metadados, que são seguidos de uma lista de certificados revogados, finalizando com uma assinatura. Se o serial do servidor estiver na lista, significa que foi revogado.
Se não quiser procurar o serial visualmente, utilize o grep para fazer a filtragem. openssl crl -in rapidssl.crl -inform DER -text -noout | grep FE760
A ferramenta openssl possui um código interno que permite verificar vulnerabilidade
de segurança em servidores remotos, como a HeartBleed
. Para utiliza-la,
execute o OpenSSL com o parametro -tlsextdebug
:
$ openssl s_client -connect www.guiafoca.org:443 -tlsextdebug
CONNECTED(00000003) TLS server extension "renegotiation info" (id=65281), len=1 0001 - <SPACES/NULS> TLS server extension "EC point formats" (id=11), len=4 0000 - 03 00 01 02 .... TLS server extension "session ticket" (id=35), len=0 TLS server extension "heartbeat" (id=15), len=1
Caso a saída do comando mostrar heartbeat ele
está vulnerável ao ataque HeatBleed
.
No OpenSSL 1.0.2 e mais novos, quando você se conecta ao servidor utilizando o parametro
s_client
, ele exibe mostra o tamanho da chave DH usada. Assim para determinar
o tamanho de parametros DH, precisa conectar a ele utilizando ciphers que usam o
DH para troca de chave:
openssl-1.0.2 s_client -connnect www.guiafoca.org:443 -cipher kEDH
[...] --- No client certificate CA names sent Peer signing digest: SHA256 Peer signature type: RSA-PSS Server Temp Key: X25519, 253 bits --- [...]
Copyright © 1999-2020 - Gleydson Mazioli da Silva