1、前面过程同服务器回复ServerHello消息。
2、ossl_statem_client_process_message()
根据st->hand_state类型
现在是:TLS_ST_CR_CERT
所以处理方法:tls_process_server_certificate()
3、具体报文数据如下
A4 00 | 00代表context
03 61 | 第0个证书长度
30 82 03 5D 30 82 02 45 A0 03 02 01 02 02 11 00 B1 42 67 79 3C 6D DC F6 4D 3E F8 BF 05 DA 68 5C 30 0D 06 09 2A 86 48 86 F7 0D 01 01 0B 05 00 30 16 31 14 30 12 06 03 55 04 03 0C 0B 45 61 73 79 2D 52 53 41 20 43 41 30 1E 17 0D 32 34 30 39 30 36 30 36 35 31 34 38 5A 17 0D 32 36 31 32 31 30 30 36 35 31 34 38 5A 30 11 31 0F 30 0D 06 03 55 04 03 0C 06 73 65 72 76 65 72 30 82 01 22 30 0D 06 09 2A 86 48 86 F7 0D 01 01 01 05 00 03 82 01 0F 00 30 82 01 0A 02 82 01 01 00 C2 A4 CA 3B D4 CF 05 0C 99 A9 03 03 07 4F 08 1E CD 62 1A E4 04 D9 AE 03 B5 1F 32 22 AA 3F D4 FC 1E D7 B1 7C 51 11 99 8F 9E 37 28 A8 CB E7 75 65 D9 63 FE 52 00 23 33 98 29 B5 4B 53 51 73 DB 6B DD B8 EC A6 4F CD 15 4C 93 47 46 20 3A 54 4A B3 AE BD 2E D1 94 9C A3 67 0E C5 15 16 69 E9 38 3E A4 89 D3 FB DB D3 49 53 91 29 CA 7D 7E 51 A7 37 92 24 20 7B 99 0A CE B4 BD 63 8F D6 66 E8 08 08 88 9E 57 70 85 CB 25 3C 0E 30 6C FB DA A3 BA EB B6 70 80 D7 96 10 12 17 75 B6 83 D3 6D 77 10 5B 82 1A D9 C6 9C 36 00 C1 12 5D DE 93 24 6A 5F D7 F2 CD 2E 37 06 6A FC A4 E1 46 D5 DA 36 D6 AA AC 05 00 C0 83 3E 16 BA A9 B9 75 FB 67 B7 B7 E4 9C EE 28 DD 6A 5A 47 68 8D 59 06 53 C7 0C 80 19 1B 78 A3 04 1D 50 6E C5 2A BD 1B 89 77 19 CE 88 E0 6B FB 91 BF EF F5 C2 52 98 E2 D8 A0 58 73 63 51 02 03 01 00 01 A3 81 AA 30 81 A7 30 09 06 03 55 1D 13 04 02 30 00 30 1D 06 03 55 1D 0E 04 16 04 14 45 BA 4B 3F 4B 29 FB BB 8C 52 E8 A6 88 CB E8 C3 00 80 15 86 30 46 06 03 55 1D 23 04 3F 30 3D 80 14 B2 14 86 74 4C A5 6C AD D8 22 16 B1 42 46 65 C7 74 06 81 CC A1 1A A4 18 30 16 31 14 30 12 06 03 55 04 03 0C 0B 45 61 73 79 2D 52 53 41 20 43 41 82 09 00 C1 55 18 90 1F 3D 8B 0C 30 13 06 03 55 1D 25 04 0C 30 0A 06 08 2B 06 01 05 05 07 03 01 30 0B 06 03 55 1D 0F 04 04 03 02 05 A0 30 11 06 03 55 1D 11 04 0A 30 08 82 06 73 65 72 76 65 72 30 0D 06 09 2A 86 48 86 F7 0D 01 01 0B 05 00 03 82 01 01 00 4C 6A 37 9A 9D 7A D2 D8 43 18 91 96 60 8B 65 31 56 D5 64 0E CF 9A FF AE 8D 67 56 B0 49 FF 91 14 90 96 64 65 42 AB 40 A3 25 7E 92 81 66 6F C1 89 A4 B5 34 A9 5F F5 9F 82 CA 4F 4D 2B A8 E5 C3 5B 57 77 26 08 81 BB 1B 4F 7C 71 9F 47 6D EE 05 DA BA 50 A0 81 17 9D 81 B0 CB 7E B5 7D 07 74 B4 DD 62 A2 1F FA 8C 75 7B 74 5F 4D 49 BB 3D EA 4D BB 6C 97 CD 6E F0 C3 A8 D5 47 8F C8 5A D5 FC DD F1 44 66 07 10 29 F4 3A 5C A3 12 4B 9B 41 49 FB FA E3 77 66 60 FD A5 87 C5 A2 C6 A0 BD BB A9 31 C0 F3 DB 74 3B 92 F8 52 4D 09 5E E0 83 3C BC 82 79 A4 4D 4A 6F F8 EC F4 C9 74 00 FA 86 5D 12 B5 D6 3C 38 AD 1B 94 63 40 B3 90 86 EF 78 E5 92 FA 12 85 25 B9 CB 97 D9 4F 81 84 1A 94 7F DC 28 3C 41 81 B6 B6 12 4A 82 BD A0 21 35 73 57 DE 92 3B AD A8 91 33 73 2C C0 C9 B7 1D D0 DA 7F 76 34 1E 67 00 00 00
03 39 | 第1个证书长度
30 82 03 35 30 82 02 1D A0 03 02 01 02 02 09 00 C1 55 18 90 1F 3D 8B 0C 30 0D 06 09 2A 86 48 86 F7 0D 01 01 0B 05 00 30 16 31 14 30 12 06 03 55 04 03 0C 0B 45 61 73 79 2D 52 53 41 20 43 41 30 1E 17 0D 32 34 30 39 30 36 30 36 34 39 30 37 5A 17 0D 33 34 30 39 30 34 30 36 34 39 30 37 5A 30 16 31 14 30 12 06 03 55 04 03 0C 0B 45 61 73 79 2D 52 53 41 20 43 41 30 82 01 22 30 0D 06 09 2A 86 48 86 F7 0D 01 01 01 05 00 03 82 01 0F 00 30 82 01 0A 02 82 01 01 00 A0 75 9E 23 07 E6 70 FE EE 72 84 DD 7F 54 1A 57 1A 52 06 99 F7 55 2F 45 1D 30 71 10 2B 2B FA 27 40 B3 49 12 18 D5 8D 76 4F 57 CC 20 07 46 5B 6C 32 4E 70 97 57 D9 1E 54 1C 2D DC 39 E2 B5 23 92 F6 83 2D 60 32 5C E0 F9 C1 4E 29 57 59 D1 74 5C DF 28 F9 CE 56 1F 59 57 1D 6F 93 72 56 87 10 0C 14 70 06 C4 79 AA ED 29 5F A0 13 FF F7 03 71 A9 B9 92 B6 80 BB 6E 50 8B 04 42 F7 EB 4E 22 6E 98 82 EC E0 B4 A1 3F 47 0D 87 E6 33 F6 59 E9 E8 B4 DA 21 84 9E DD 67 14 AA A6 89 9C 1C 2B 6A DF 53 C1 81 79 BF C2 C9 1D 21 08 63 A7 63 99 42 C5 86 99 F4 AC 5F 64 8E 69 EC F0 B3 E7 56 93 A0 91 93 A7 DF E4 DF F6 1D 8D 85 60 04 E4 1B D7 E7 F5 16 A5 72 09 15 87 45 8C 59 45 52 48 F2 48 F1 61 32 B7 4F 16 E9 AB EB D4 2C 00 00 21 3C 86 F4 C1 84 01 2F D6 C2 4F EC D8 19 A5 91 AF C8 FE 1F 44 7D 02 03 01 00 01 A3 81 85 30 81 82 30 1D 06 03 55 1D 0E 04 16 04 14 B2 14 86 74 4C A5 6C AD D8 22 16 B1 42 46 65 C7 74 06 81 CC 30 46 06 03 55 1D 23 04 3F 30 3D 80 14 B2 14 86 74 4C A5 6C AD D8 2
证书链保存在:s->session->peer_chain
服务端此消息的构造函数:tls_construct_server_certificate,证书取自:s->s3.tmp.cert,根据配置文件:server.conf设置
4、tls_post_process_server_certificate
调用ssl_verify_cert_chain()
调用ssl_verify_internal()
auth_level=1
调用X509_verify_cert()
调用x509_verify_x509(ctx)
调用ossl_x509_add_cert_new()加入证书
ctx->num_untrusted = 1 不信任证书
调用verify_chain(ctx)
调用internal_verify(ctx)
第二个证书:
X509_verify()
调用ASN1_item_verify_ex()
调用ASN1_item_verify_ctx()
调用EVP_DigestVerify(ctx, signature->data, (size_t)signature->length,buf_in, inl)
调用EVP_DigestVerifyFinal(ctx, sigret, siglen)
调用pctx->op.sig.signature->digest_verify_final(pctx->op.sig.algctx sig, siglen);
对应的方法就是OSSL_FUNC_signature_digest_verify_final_fn
如果是rsa类型,就是在rsa_sig.c中定义:
static OSSL_FUNC_signature_digest_verify_final_fn rsa_digest_verify_final;
所以调用方法rsa_digest_verify_final,调用rsa_verify()
如果是sm2类型,就是在sm2_sig.c中定义:
static OSSL_FUNC_signature_digest_verify_final_fn sm2sig_digest_verify_final;
所以调用方法sm2sig_digest_verify_final,调用sm2sig_verify()