@@ -40,7 +40,7 @@ namespace hcpp
4040 {
4141 enable_sni_ = false ;
4242 }
43- awaitable<void > mitm_svc::make_memory (std::shared_ptr<mitm_svc> self, std:: string svc_host, std::string svc_service)
43+ awaitable<void > mitm_svc::make_memory (std::string svc_host, std::string svc_service, part_cert_info &pci )
4444 {
4545 try
4646 {
@@ -56,8 +56,7 @@ namespace hcpp
5656 {
5757 ssl_m->set_sni (sni_host_);
5858 }
59-
60- auto verify_fun = [self, host = svc_host](bool preverified, auto &v_ctx)
59+ auto verify_fun = [&pci, host = svc_host](bool preverified, auto &v_ctx)
6160 {
6261 if (ssl::host_name_verification (host)(preverified, v_ctx))
6362 {
@@ -68,7 +67,7 @@ namespace hcpp
6867 // echo -n | openssl s_client -connect gitee.com:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' | openssl x509 -text -noout
6968 // 获取目标主机证书中的subjectAltName
7069 // https://www.openssl.org/docs/manmaster/man3/X509_get_ext_d2i.html
71- if (GENERAL_NAMES * names = (GENERAL_NAMES *)X509_get_ext_d2i (cert, NID_subject_alt_name, nullptr , nullptr ); names != nullptr )
70+ if (auto names = (GENERAL_NAMES *)X509_get_ext_d2i (cert, NID_subject_alt_name, nullptr , nullptr ); names != nullptr )
7271 {
7372
7473 for (int j = 0 ; j < sk_GENERAL_NAME_num (names); j++)
@@ -79,12 +78,14 @@ namespace hcpp
7978 // 如果是DNS类型的Subject Alternative Name
8079 // 获取DNS名称
8180 char *dns_name = (char *)ASN1_STRING_get0_data (name->d .dNSName );
82- log::error (" DNS Name: {}" , dns_name);
83- self-> dns_name_ .push_back (dns_name);
81+ log::info (" DNS Name: {}" , dns_name);
82+ pci. dns_name_ .push_back (dns_name);
8483 }
8584 // 可以根据需要处理其他类型的Subject Alternative Name
8685 }
8786 }
87+
88+ pci.pubkey_ = make_pem_str (X509_get_X509_PUBKEY (cert));
8889 return true ;
8990 }
9091 else
@@ -107,14 +108,10 @@ namespace hcpp
107108 throw ;
108109 }
109110 }
110- subject_identify mitm_svc::make_fake_server_id (std::shared_ptr<subject_identify> si )
111+ subject_identify mitm_svc::make_fake_server_id (const std::vector<std::string> &dns_name, std:: shared_ptr<subject_identify> ca_si )
111112 {
112- if (!m_)
113- {
114- throw std::runtime_error (" mitm_svc::make_fake_cert:m_ is null" );
115- }
116- auto ca_pky = make_pkey (si->pkey_pem_ );
117- auto ca_cert = make_x509 (si->cert_pem_ );
113+ auto ca_pky = make_pkey (ca_si->pkey_pem_ );
114+ auto ca_cert = make_x509 (ca_si->cert_pem_ );
118115
119116 auto cert = make_x509 ();
120117 auto pky = make_pkey ();
@@ -125,7 +122,7 @@ namespace hcpp
125122
126123 set_subject (cert);
127124 // 设置目标服务器的dns
128- add_DNS_SAN (cert, dns_name_ );
125+ add_DNS_SAN (cert, dns_name );
129126
130127 add_AKI (cert);
131128 add_SKI (cert);
0 commit comments