Pessoal, logando o processo de handshake eu percebi o seguinte:
Meu certificado é válido
[code]keyStore is : xxxxx.pfx
keyStore type is : PKCS12
keyStore provider is :
init keystore
init keymanager of type SunX509
found key for : xxxxxxxxxxx
chain [0] = [
[
Version: V3
Subject: CN=xxxxxxxxxxxxxxxxx, ST=MG, L=BELO HORIZONTE, OU=Pessoa Juridica A1, OU=MAXXDATA, OU=Autoridade Certificadora SERPROACF, O=ICP-Brasil, C=BR
Signature Algorithm: SHA1withRSA, OID = 1.2.840.113549.1.1.5
Key: Sun RSA public key, 1024 bits
Validity: [From: Fri Feb 19 16:12:30 BRST 2010,
To: Sat Feb 19 16:07:10 BRST 2011]
Issuer: CN=Autoridade Certificadora do SERPRO Final v2, OU=CSPB-1, OU=Servico Federal de Processamento de Dados - SERPRO, O=ICP-Brasil, C=BR
SerialNumber: [ 32303130 30323139 31383033 35363238][/code]
Mas a frente temos alguns passos da negociação:
[code]*** ClientHello, SSLv3
RandomCookie: GMT: 1273914485 bytes = { 203, 155, 0, 157, 218, 191, 174, 161, 225, 229, 102, 109, 25, 208, 96, 245, 14, 216, 77, 38, 161, 125, 43, 1, 197, 177, 241, 196 }
Session ID: {}
Cipher Suites: [SSL_RSA_WITH_RC4_128_MD5, SSL_RSA_WITH_RC4_128_SHA, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA, SSL_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA, SSL_RSA_WITH_DES_CBC_SHA, SSL_DHE_RSA_WITH_DES_CBC_SHA, SSL_DHE_DSS_WITH_DES_CBC_SHA, SSL_RSA_EXPORT_WITH_RC4_40_MD5, SSL_RSA_EXPORT_WITH_DES40_CBC_SHA, SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA, SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA, TLS_KRB5_WITH_RC4_128_SHA, TLS_KRB5_WITH_RC4_128_MD5, TLS_KRB5_WITH_3DES_EDE_CBC_SHA, TLS_KRB5_WITH_3DES_EDE_CBC_MD5, TLS_KRB5_WITH_DES_CBC_SHA, TLS_KRB5_WITH_DES_CBC_MD5, TLS_KRB5_EXPORT_WITH_RC4_40_SHA, TLS_KRB5_EXPORT_WITH_RC4_40_MD5, TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA, TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5]
Compression Methods: { 0 }
http-8080-2, WRITE: SSLv3 Handshake, length = 93
http-8080-2, READ: SSLv3 Handshake, length = 74
*** ServerHello, SSLv3
RandomCookie: GMT: 1273914288 bytes = { 83, 44, 2, 47, 146, 225, 207, 7, 132, 28, 159, 95, 164, 83, 123, 163, 118, 20, 77, 65, 142, 154, 171, 76, 175, 231, 75, 220 }
Session ID: {240, 115, 89, 68, 247, 215, 171, 46, 168, 55, 8, 121, 202, 207, 226, 17, 26, 236, 97, 234, 114, 102, 101, 34, 105, 83, 162, 71, 219, 74, 110, 223}
Cipher Suite: SSL_RSA_WITH_RC4_128_MD5
Compression Method: 0
%% Created: [Session-1, SSL_RSA_WITH_RC4_128_MD5]
** SSL_RSA_WITH_RC4_128_MD5
http-8080-2, READ: SSLv3 Handshake, length = 5346
*** Certificate chain
chain [0] = [
[
Version: V3
Subject: CN=hnfe.fazenda.mg.gov.br, OU=(EM BRANCO), OU=(EM BRANCO), OU=Assinatura Tipo A1, OU=Autenticado por AR Prodemge, OU=ID - 582017, O=ICP-Brasil, C=BR
Signature Algorithm: SHA1withRSA, OID = 1.2.840.113549.1.1.5
Key: Sun RSA public key, 1024 bits
modulus: 124799196738322759999642978251440139918363629846334171847416360258359297478024667812758266204113608879785551792434878048610664552667873028906444481641209383220590514872602781190261189817328405459767864419859057827193328386912746508664916155099024418886763619212429199426543482152686035202183904737067575008637
public exponent: 65537
Validity: [From: Mon Dec 28 22:00:00 BRST 2009,
To: Tue Dec 28 21:59:59 BRST 2010]
Issuer: CN=AC PRODEMGE G2, OU=Companhia de Tecnologia da Informacao do Estado de MG - PRODEMGE, O=ICP-Brasil, C=BR
SerialNumber: [ 1fd1a579 44b97395 f8effcbb 63517aa0][/code]
Depois o server envia um CertificateRequest
http-8080-2, READ: SSLv3 Handshake, length = 6827
*** CertificateRequest
Cert Types: RSA, DSS
Cert Authorities:
<CN=AC FENACOR, O=ICP-Brasil, C=BR>
<CN=AC Secretaria da Receita Federal do Brasil, O=ICP-Brasil, C=BR>
<CN=Autoridade Certificadora da Justica, O=ICP-Brasil, C=BR>
<CN=Autoridade Certificadora da Presidencia da Republica, O=ICP-Brasil, C=BR>
<CN=Autoridade Certificadora da Presidencia da Republica v2, O=ICP-Brasil, C=BR>
<CN=Autoridade Certificadora da Secretaria da Receita Federal v1, O=ICP-Brasil, C=BR>
<CN=Autoridade Certificadora SERPRO v2, O=ICP-Brasil, C=BR>
<CN=SERASA Certificadora Digital, O=ICP-Brasil, C=BR>
<CN=SERASA Certificadora Digital v1, O=ICP-Brasil, C=BR>
<CN=AC BR RFB G2, OU=Secretaria da Receita Federal do Brasil - RFB, O=ICP-Brasil, C=BR>
<CN=AC CAIXA, OU=Caixa Economica Federal, O=ICP-Brasil, C=br>
<CN=AC CAIXA PF, OU=Caixa Economica Federal, O=ICP-Brasil, C=br>
<CN=AC CAIXA PJ, OU=Caixa Economica Federal, O=ICP-Brasil, C=br>
<CN=AC CAIXA-JUS, OU=Autoridade Certificadora da Justica - AC-JUS, O=ICP-Brasil, C=BR>
<CN=AC Certisign G3, OU=Instituto Nacional de Tecnologia da Informacao - ITI, O=ICP-Brasil, C=BR>
<CN=AC CertiSign JUS, OU=Autoridade Certificadora da Justica - AC-JUS, O=ICP-Brasil, C=BR>
<CN=AC Certisign Multipla G3, OU=Certisign Certificadora Digital S.A., O=ICP-Brasil, C=BR>
<CN=AC CertiSign Multipla V3, OU=Certisign Certificadora Digital S.A., O=ICP-Brasil, C=BR>
<CN=AC Certisign RFB G3, OU=Secretaria da Receita Federal do Brasil - RFB, O=ICP-Brasil, C=BR>
<CN=AC CertiSign SRF V3, OU=Secretaria da Receita Federal - SRF, O=ICP-Brasil, C=BR>
<CN=AC CertiSign V3, OU=AC CertiSign V3, O=ICP-Brasil, C=BR>
<CN=AC FENACON Certisign RFB G2, OU=Secretaria da Receita Federal do Brasil - RFB, O=ICP-Brasil, C=BR>
<CN=AC FENACON Certisign SRF, OU=Secretaria da Receita Federal - SRF, O=ICP-Brasil, C=BR>
<CN=AC Imprensa Oficial SP, OU=Imprensa Oficial do Estado S A IMESP, O=ICP-Brasil, C=BR>
<CN=AC Imprensa Oficial SP, OU=Instituto Nacional de Tecnologia da Informacao - ITI, O=ICP-Brasil, C=BR>
<CN=AC Imprensa Oficial SP RFB G2, OU=Secretaria da Receita Federal do Brasil - RFB, O=ICP-Brasil, C=BR>
<CN=AC Imprensa Oficial SP SRF, OU=Secretaria da Receita Federal - SRF, O=ICP-Brasil, C=BR>
<CN=AC Notarial RFB G2, OU=Secretaria da Receita Federal do Brasil - RFB, O=ICP-Brasil, C=BR>
<CN=AC PETROBRAS, OU=PETROLEO BRASILEIRO S A PETROBRAS, O=ICP-Brasil, C=BR>
<CN=AC PRODEMGE, OU=Companhia de Tecnologia da Informacao do Estado de MG - PRODEMGE, O=ICP-Brasil, C=BR>
<CN=AC PRODEMGE G2, OU=Companhia de Tecnologia da Informacao do Estado de MG - PRODEMGE, O=ICP-Brasil, C=BR>
<CN=AC PRODEMGE RFB G2, OU=Secretaria da Receita Federal do Brasil - RFB, O=ICP-Brasil, C=BR>
<CN=AC PRODEMGE SRF, OU=Secretaria da Receita Federal - SRF, O=ICP-Brasil, C=BR>
<CN=AC SERASA RFB v1, OU=Secretaria da Receita Federal do Brasil - RFB, O=ICP-Brasil, C=BR>
<CN=AC SERASA SRF, OU=Secretaria da Receita Federal - SRF, O=ICP-Brasil, C=BR>
<CN=AC SINCOR, OU=SINCOR-SP - Sindicato dos Corretores de Seguros no Estado de SP, O=ICP-Brasil, C=BR>
<CN=AC SINCOR G2, OU=SINCOR-SP - Sindicato dos Corretores de Seguros no Estado de SP, O=ICP-Brasil, C=BR>
<CN=AC SINCOR RFB G2, OU=Secretaria da Receita Federal do Brasil - RFB, O=ICP-Brasil, C=BR>
<CN=Autoridade Certificadora da Presidencia da Republica v1, OU=Instituto Nacional de Tecnologia da Informacao - ITI, O=ICP-Brasil, C=BR>
<CN=Autoridade Certificadora do SERPRO SRF v1, OU=Secretaria da Receita Federal - SRF, O=ICP-Brasil, C=BR>
<CN=Autoridade Certificadora do SERPRO v1, OU=Servico Federal de Processamento de Dados - SERPRO, O=ICP-Brasil, C=BR>
<CN=Autoridade Certificadora do SERPRORFB, OU=Secretaria da Receita Federal do Brasil - RFB, O=ICP-Brasil, C=BR>
<CN=Autoridade Certificadora do Sistema Justica Federal, OU=Conselho da Justica Federal - CJF, O=ICP-Brasil, C=BR>
<CN=Autoridade Certificadora Raiz Brasileira v1, OU=Instituto Nacional de Tecnologia da Informacao - ITI, O=ICP-Brasil, C=BR>
<CN=Autoridade Certificadora SERPRO-JUS, OU=Autoridade Certificadora da Justica - AC-JUS, O=ICP-Brasil, C=BR>
<CN=SERASA Autoridade Certificadora, OU=CSPB-4, O=ICP-Brasil, C=BR>
<CN=SERASA Autoridade Certificadora Principal, OU=Instituto Nacional de Tecnologia da Informacao - ITI, O=ICP-Brasil, C=BR>
<CN=SERASA Autoridade Certificadora Principal v1, OU=Instituto Nacional de Tecnologia da Informacao - ITI, O=ICP-Brasil, C=BR>
<CN=SERASA Autoridade Certificadora v1, OU=CSPB-4, O=ICP-Brasil, C=BR>
<CN=AC CertiSign SPB V3, OU=CSPB-2, OU=Certisign Certificadora Digital S.A., O=ICP-Brasil, C=BR>
<CN=Autoridade Certificadora do SERPRO Final v1, OU=CSPB-1, OU=Servico Federal de Processamento de Dados - SERPRO, O=ICP-Brasil, C=BR>
<CN=Autoridade Certificadora do SERPRO Final v2, OU=CSPB-1, OU=Servico Federal de Processamento de Dados - SERPRO, O=ICP-Brasil, C=BR>
<CN=Autoridade Certificadora Raiz Brasileira, ST=DF, L=Brasilia, OU=Instituto Nacional de Tecnologia da Informacao - ITI, O=ICP-Brasil, C=BR>
<CN=NFe2 - AC Raiz, C=BR, L=Porto Alegre, O=Teste Projeto NFe RS, OU=Teste Projeto NFe RS, ST=RS>
<EMAILADDRESS=appuser@fazenda.mg.gov.br, CN=DSP, OU=Superintendencia de Planejamento e Informatica, O=Secretaria de Estado da Fazenda de Minas Gerais, L=Belo Horizonte, ST=Minas Gerais, C=BR>
*** ServerHelloDone
Agora ocorre algo estranho, note que acima o servidor envia um certificate_request Cert Types: RSA, DSS para as CA’s listadas acima.
Veja que minha aplicação respondeu com um alert no_certificate como se ele não tivesse encontrado nenhum certificado válido para o servidor.
Mas meu certificado é RSA e emitido por uma das CAs listadas pelo server.
Isso parece que não foi suficiente para falhar o handshake e o processo continua.
[code]
http-8080-2, SEND SSLv3 ALERT: warning, description = no_certificate
http-8080-2, WRITE: SSLv3 Alert, length = 2
*** ClientKeyExchange, RSA PreMasterSecret, SSLv3
http-8080-2, WRITE: SSLv3 Handshake, length = 132
SESSION KEYGEN:
PreMaster Secret:
0000: 03 00 BD D8 48 DA 5F B7 1A BF 73 6D 3A 26 A3 41 …H.…sm:&.A
0010: CE 62 78 55 E5 60 A7 3B 37 B3 CA 33 12 03 63 A3 .bxU..;7..3..c. 0020: 01 B3 A9 90 21 30 06 93 DC B6 D0 E7 41 EC EA 7E ....!0......A... CONNECTION KEYGEN: Client Nonce: 0000: 4C EE 64 75 CB 9B 00 9D DA BF AE A1 E1 E5 66 6D L.du..........fm 0010: 19 D0 60 F5 0E D8 4D 26 A1 7D 2B 01 C5 B1 F1 C4 ..…M&…+…
Server Nonce:
0000: 4C EE 64 B0 53 2C 02 2F 92 E1 CF 07 84 1C 9F 5F L.d.S,./…
0010: A4 53 7B A3 76 14 4D 41 8E 9A AB 4C AF E7 4B DC .S…v.MA…L…K.
Master Secret:
0000: 1A 72 B3 C8 D7 70 AB CC 2A 33 3D 21 DA 65 CE 4A .r…p…*3=!.e.J
0010: BE 03 A7 4E 74 D1 43 8E F2 A8 FD B8 A8 36 7F 02 …Nt.C…6…
0020: B9 76 DE 46 6E 9A F8 7E EB A8 B1 F8 12 F8 DF B5 .v.Fn…
Client MAC write Secret:
0000: C1 C2 8A 24 DC E1 ED 90 8A 17 1F 7C 28 6F 07 9A …$…(o…
Server MAC write Secret:
0000: A3 B9 D2 C7 B2 27 30 60 D5 1D 71 A4 E9 EE 18 09 …'0`…q…
Client write key:
0000: 08 07 89 54 FE 3B D4 AF 74 FF 46 36 70 A8 3B 23 …T.;…t.F6p.;#
Server write key:
0000: BE 06 D1 91 54 7C 3A A5 55 A7 EC 89 EE 76 48 D9 …T.:.U…vH.
… no IV used for this cipher
http-8080-2, WRITE: SSLv3 Change Cipher Spec, length = 1
*** Finished
verify_data: { 23, 99, 38, 126, 222, 67, 223, 167, 56, 237, 62, 44, 145, 33, 162, 142, 138, 211, 64, 205, 135, 5, 43, 0, 187, 207, 182, 242, 134, 133, 165, 22, 15, 214, 224, 119 }
http-8080-2, WRITE: SSLv3 Handshake, length = 56
http-8080-2, READ: SSLv3 Alert, length = 2
http-8080-2, RECV SSLv3 ALERT: fatal, handshake_failure
http-8080-2, called closeSocket()
http-8080-2, handling exception: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure[/code]