Changeset 285838 in webkit
- Timestamp:
- Nov 15, 2021, 2:44:13 PM (5 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 6 edited
-
ChangeLog (modified) (1 diff)
-
platform/network/curl/CertificateInfo.h (modified) (1 diff)
-
platform/network/curl/CurlContext.cpp (modified) (3 diffs)
-
platform/network/curl/CurlContext.h (modified) (3 diffs)
-
platform/network/curl/OpenSSLHelper.cpp (modified) (6 diffs)
-
platform/network/curl/OpenSSLHelper.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r285837 r285838 1 2021-11-15 Takashi Komori <Takashi.Komori@sony.com> 2 3 [Curl] Security information sometimes do not appear in inspector network tab 4 https://bugs.webkit.org/show_bug.cgi?id=232971 5 6 Reviewed by Fujii Hironori. 7 8 Get certificate information from SSL context when CurlSSLVerifier is empty. 9 10 No tests yet. 11 12 * platform/network/curl/CertificateInfo.h: 13 * platform/network/curl/CurlContext.cpp: 14 (WebCore:: const): 15 (WebCore::CurlHandle::addExtraNetworkLoadMetrics): 16 (WebCore::CurlHandle::certificateInfo const): 17 * platform/network/curl/CurlContext.h: 18 * platform/network/curl/OpenSSLHelper.cpp: 19 (OpenSSL::StackOfX509::StackOfX509): 20 (OpenSSL::StackOfX509::~StackOfX509): 21 (OpenSSL::pemDataFromCtx): 22 (OpenSSL::createCertificateInfo): 23 * platform/network/curl/OpenSSLHelper.h: 24 1 25 2021-11-15 Kiet Ho <tho22@apple.com> 2 26 -
trunk/Source/WebCore/platform/network/curl/CertificateInfo.h
r278253 r285838 36 36 37 37 class CertificateInfo { 38 WTF_MAKE_FAST_ALLOCATED; 38 39 public: 39 40 using Certificate = Vector<uint8_t>; -
trunk/Source/WebCore/platform/network/curl/CurlContext.cpp
r285146 r285838 777 777 } 778 778 779 std::optional<SSL*> CurlHandle::sslConnection() const 780 { 781 curl_tlssessioninfo* info = nullptr; 782 783 auto errorCode = curl_easy_getinfo(m_handle, CURLINFO_TLS_SSL_PTR, &info); 784 if (errorCode != CURLE_OK) 785 return std::nullopt; 786 787 if (!info || info->backend != CURLSSLBACKEND_OPENSSL || !info->internals) 788 return std::nullopt; 789 790 return static_cast<SSL*>(info->internals); 791 } 792 779 793 std::optional<NetworkLoadMetrics> CurlHandle::getNetworkLoadMetrics(MonotonicTime startTime) 780 794 { … … 872 886 auto additionalMetrics = AdditionalNetworkLoadMetricsForWebInspector::create(); 873 887 if (!m_tlsConnectionInfo) { 874 curl_tlssessioninfo* info = nullptr; 875 876 errorCode = curl_easy_getinfo(m_handle, CURLINFO_TLS_SSL_PTR, &info); 877 if (errorCode != CURLE_OK) 878 return; 879 880 if (info && info->backend == CURLSSLBACKEND_OPENSSL && info->internals) { 881 auto ssl = static_cast<SSL*>(info->internals); 882 888 if (auto ssl = sslConnection()) { 883 889 m_tlsConnectionInfo = makeUnique<TLSConnectionInfo>(); 884 m_tlsConnectionInfo->protocol = OpenSSL::tlsVersion( ssl);885 m_tlsConnectionInfo->cipher = OpenSSL::tlsCipherName( ssl);890 m_tlsConnectionInfo->protocol = OpenSSL::tlsVersion(*ssl); 891 m_tlsConnectionInfo->cipher = OpenSSL::tlsCipherName(*ssl); 886 892 } 887 893 } … … 907 913 std::optional<CertificateInfo> CurlHandle::certificateInfo() const 908 914 { 909 if (!m_sslVerifier) 910 return std::nullopt; 911 912 return m_sslVerifier->certificateInfo(); 915 if (m_sslVerifier && !m_sslVerifier->certificateInfo().isEmpty()) 916 return m_sslVerifier->certificateInfo(); 917 918 // If you use an existing HTTP/2 connection, SSLVerifier does not exist. 919 if (m_certificateInfo) 920 return *m_certificateInfo; 921 922 if (auto ssl = sslConnection()) { 923 if (auto certificateInfo = OpenSSL::createCertificateInfo(*ssl)) { 924 m_certificateInfo = WTFMove(certificateInfo); 925 return *m_certificateInfo; 926 } 927 } 928 929 return std::nullopt; 913 930 } 914 931 -
trunk/Source/WebCore/platform/network/curl/CurlContext.h
r282904 r285838 27 27 #pragma once 28 28 29 #include "CertificateInfo.h" 29 30 #include "CurlProxySettings.h" 30 31 #include "CurlSSLHandle.h" … … 331 332 CURLcode willSetupSslCtx(void* sslCtx); 332 333 334 std::optional<SSL*> sslConnection() const; 335 333 336 CURL* m_handle { nullptr }; 334 337 char m_errorBuffer[CURL_ERROR_SIZE] { }; … … 339 342 std::unique_ptr<CurlSSLVerifier> m_sslVerifier; 340 343 std::unique_ptr<TLSConnectionInfo> m_tlsConnectionInfo; 344 mutable std::unique_ptr<CertificateInfo> m_certificateInfo; 341 345 }; 342 346 -
trunk/Source/WebCore/platform/network/curl/OpenSSLHelper.cpp
r282904 r285838 68 68 class StackOfX509 { 69 69 public: 70 StackOfX509(STACK_OF(X509)* certs) 71 : m_certs { certs } 72 , m_owner { false } 73 { 74 } 75 70 76 StackOfX509(X509_STORE_CTX* ctx) 71 77 : m_certs { X509_STORE_CTX_get1_chain(ctx) } 78 , m_owner { true } 72 79 { 73 80 } … … 75 82 ~StackOfX509() 76 83 { 77 if (m_certs )84 if (m_certs && m_owner) 78 85 sk_X509_pop_free(m_certs, X509_free); 79 86 } … … 83 90 84 91 private: 85 STACK_OF(X509)* m_certs { nullptr }; 92 STACK_OF(X509)* m_certs; 93 bool m_owner; 86 94 }; 87 95 … … 142 150 143 151 144 static Vector<WebCore::CertificateInfo::Certificate> pemDataFromCtx( X509_STORE_CTX* ctx)152 static Vector<WebCore::CertificateInfo::Certificate> pemDataFromCtx(StackOfX509&& certs) 145 153 { 146 154 Vector<WebCore::CertificateInfo::Certificate> result; 147 StackOfX509 certs { ctx };148 155 149 156 for (int i = 0; i < certs.count(); i++) { … … 159 166 } 160 167 168 std::unique_ptr<WebCore::CertificateInfo> createCertificateInfo(SSL* ssl) 169 { 170 if (!ssl) 171 return nullptr; 172 173 auto certChain = SSL_get_peer_cert_chain(ssl); 174 175 return makeUnique<WebCore::CertificateInfo>(X509_V_OK, pemDataFromCtx(StackOfX509(certChain))); 176 } 177 161 178 std::optional<WebCore::CertificateInfo> createCertificateInfo(X509_STORE_CTX* ctx) 162 179 { … … 164 181 return std::nullopt; 165 182 166 return WebCore::CertificateInfo(X509_STORE_CTX_get_error(ctx), pemDataFromCtx( ctx));183 return WebCore::CertificateInfo(X509_STORE_CTX_get_error(ctx), pemDataFromCtx(StackOfX509(ctx))); 167 184 } 168 185 -
trunk/Source/WebCore/platform/network/curl/OpenSSLHelper.h
r282904 r285838 32 32 namespace OpenSSL { 33 33 34 std::unique_ptr<WebCore::CertificateInfo> createCertificateInfo(SSL*); 34 35 std::optional<WebCore::CertificateInfo> createCertificateInfo(X509_STORE_CTX*); 35 36 std::optional<WebCore::CertificateSummary> createSummaryInfo(const Vector<uint8_t>& pem);
Note:
See TracChangeset
for help on using the changeset viewer.