Changeset 258728 in webkit


Ignore:
Timestamp:
Mar 19, 2020 2:18:56 PM (4 years ago)
Author:
commit-queue@webkit.org
Message:

[Curl] Add an API returns description of verification errors.
https://bugs.webkit.org/show_bug.cgi?id=208913

Patch by Takashi Komori <Takashi.Komori@sony.com> on 2020-03-19
Reviewed by Fujii Hironori.

WKCertificateInfoCopyVerificationErrorDescription returns the description of SSL verification error as human readable string.
Browser can display more precise error information with this API.

API Test: Curl.CertificateAPI

Source/WebCore:

  • platform/network/curl/CertificateInfo.h:
  • platform/network/curl/CertificateInfoCurl.cpp:

(WebCore::CertificateInfo::verificationErrorDescription const):

Source/WebKit:

  • Shared/API/c/curl/WKCertificateInfoCurl.cpp:

(WKCertificateInfoCopyVerificationErrorDescription):

  • Shared/API/c/curl/WKCertificateInfoCurl.h:

Tools:

  • MiniBrowser/win/Common.cpp:

(askServerTrustEvaluation):

  • MiniBrowser/win/Common.h:
  • MiniBrowser/win/WebKitBrowserWindow.cpp:

(createPEMString):
(WebKitBrowserWindow::canTrustServerCertificate):

  • TestWebKitAPI/Tests/WebKit/curl/Certificates.cpp:

(TestWebKitAPI::Curl::TEST):

Location:
trunk
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r258721 r258728  
     12020-03-19  Takashi Komori  <Takashi.Komori@sony.com>
     2
     3        [Curl] Add an API returns description of verification errors.
     4        https://bugs.webkit.org/show_bug.cgi?id=208913
     5
     6        Reviewed by Fujii Hironori.
     7
     8        WKCertificateInfoCopyVerificationErrorDescription returns the description of SSL verification error as human readable string.
     9        Browser can display more precise error information with this API.
     10
     11        API Test: Curl.CertificateAPI
     12
     13        * platform/network/curl/CertificateInfo.h:
     14        * platform/network/curl/CertificateInfoCurl.cpp:
     15        (WebCore::CertificateInfo::verificationErrorDescription const):
     16
    1172020-03-19  Tim Horton  <timothy_horton@apple.com>
    218
  • trunk/Source/WebCore/platform/network/curl/CertificateInfo.h

    r248268 r258728  
    4646
    4747    int verificationError() const { return m_verificationError; }
     48    WEBCORE_EXPORT String verificationErrorDescription() const;
    4849    const Vector<Certificate>& certificateChain() const { return m_certificateChain; }
    4950
  • trunk/Source/WebCore/platform/network/curl/CertificateInfoCurl.cpp

    r248268 r258728  
    2727#include "CertificateInfo.h"
    2828
     29#if USE(CURL)
     30
    2931#include "OpenSSLHelper.h"
     32#include <openssl/ssl.h>
    3033#include <wtf/CrossThreadCopier.h>
    31 
    32 #if USE(CURL)
    3334
    3435namespace WebCore {
     
    4344{
    4445    return { m_verificationError, crossThreadCopy(m_certificateChain) };
     46}
     47
     48String CertificateInfo::verificationErrorDescription() const
     49{
     50    return X509_verify_cert_error_string(m_verificationError);
    4551}
    4652
  • trunk/Source/WebKit/ChangeLog

    r258726 r258728  
     12020-03-19  Takashi Komori  <Takashi.Komori@sony.com>
     2
     3        [Curl] Add an API returns description of verification errors.
     4        https://bugs.webkit.org/show_bug.cgi?id=208913
     5
     6        Reviewed by Fujii Hironori.
     7
     8        WKCertificateInfoCopyVerificationErrorDescription returns the description of SSL verification error as human readable string.
     9        Browser can display more precise error information with this API.
     10
     11        API Test: Curl.CertificateAPI
     12
     13        * Shared/API/c/curl/WKCertificateInfoCurl.cpp:
     14        (WKCertificateInfoCopyVerificationErrorDescription):
     15        * Shared/API/c/curl/WKCertificateInfoCurl.h:
     16
    1172020-03-19  Per Arne Vollan  <pvollan@apple.com>
    218
  • trunk/Source/WebKit/Shared/API/c/curl/WKCertificateInfoCurl.cpp

    r238887 r258728  
    5757}
    5858
     59WKStringRef WKCertificateInfoCopyVerificationErrorDescription(WKCertificateInfoRef certificateInfoRef)
     60{
     61    return WebKit::toCopiedAPI(WebKit::toImpl(certificateInfoRef)->certificateInfo().verificationErrorDescription());
     62}
     63
    5964size_t WKCertificateInfoGetCertificateChainSize(WKCertificateInfoRef certificateInfoRef)
    6065{
  • trunk/Source/WebKit/Shared/API/c/curl/WKCertificateInfoCurl.h

    r238387 r258728  
    3535
    3636WK_EXPORT int WKCertificateInfoGetVerificationError(WKCertificateInfoRef);
     37WK_EXPORT WKStringRef WKCertificateInfoCopyVerificationErrorDescription(WKCertificateInfoRef);
    3738WK_EXPORT size_t WKCertificateInfoGetCertificateChainSize(WKCertificateInfoRef);
    3839WK_EXPORT WKDataRef WKCertificateInfoCopyCertificateAtIndex(WKCertificateInfoRef, size_t);
  • trunk/Tools/ChangeLog

    r258706 r258728  
     12020-03-19  Takashi Komori  <Takashi.Komori@sony.com>
     2
     3        [Curl] Add an API returns description of verification errors.
     4        https://bugs.webkit.org/show_bug.cgi?id=208913
     5
     6        Reviewed by Fujii Hironori.
     7
     8        WKCertificateInfoCopyVerificationErrorDescription returns the description of SSL verification error as human readable string.
     9        Browser can display more precise error information with this API.
     10
     11        API Test: Curl.CertificateAPI
     12
     13        * MiniBrowser/win/Common.cpp:
     14        (askServerTrustEvaluation):
     15        * MiniBrowser/win/Common.h:
     16        * MiniBrowser/win/WebKitBrowserWindow.cpp:
     17        (createPEMString):
     18        (WebKitBrowserWindow::canTrustServerCertificate):
     19        * TestWebKitAPI/Tests/WebKit/curl/Certificates.cpp:
     20        (TestWebKitAPI::Curl::TEST):
     21
    1222020-03-19  Aakash Jain  <aakash_jain@apple.com>
    223
  • trunk/Tools/MiniBrowser/win/Common.cpp

    r252872 r258728  
    233233}
    234234
    235 bool askServerTrustEvaluation(HWND hwnd, const std::wstring& pems)
     235bool askServerTrustEvaluation(HWND hwnd, const std::wstring& text)
    236236{
    237237    class ServerTrustEvaluationDialog : public Dialog {
    238238    public:
    239         ServerTrustEvaluationDialog(const std::wstring& pems)
    240             : m_pems { pems }
     239        ServerTrustEvaluationDialog(const std::wstring& text)
     240            : m_text { text }
    241241        {
    242242            SendMessage(GetDlgItem(this->hDlg(), IDC_SERVER_TRUST_TEXT), WM_SETFONT, (WPARAM)GetStockObject(ANSI_FIXED_FONT), TRUE);
     
    244244
    245245    protected:
    246         std::wstring m_pems;
     246        std::wstring m_text;
    247247
    248248        void setup()
    249249        {
    250             setText(IDC_SERVER_TRUST_TEXT, m_pems);
     250            setText(IDC_SERVER_TRUST_TEXT, m_text);
    251251        }
    252252
     
    257257    };
    258258
    259     ServerTrustEvaluationDialog dialog { pems };
     259    ServerTrustEvaluationDialog dialog { text };
    260260    return dialog.run(hInst, hwnd, IDD_SERVER_TRUST);
    261261}
  • trunk/Tools/MiniBrowser/win/Common.h

    r252872 r258728  
    6969bool askProxySettings(HWND, ProxySettings&);
    7070
    71 bool askServerTrustEvaluation(HWND, const std::wstring& pems);
     71bool askServerTrustEvaluation(HWND, const std::wstring& text);
    7272std::wstring replaceString(std::wstring src, const std::wstring& oldValue, const std::wstring& newValue);
    7373
  • trunk/Tools/MiniBrowser/win/WebKitBrowserWindow.cpp

    r256889 r258728  
    6565}
    6666
    67 std::wstring createPEMString(WKProtectionSpaceRef protectionSpace)
    68 {
    69     auto certificateInfo = WKProtectionSpaceCopyCertificateInfo(protectionSpace);
     67std::wstring createPEMString(WKCertificateInfoRef certificateInfo)
     68{
    7069    auto chainSize = WKCertificateInfoGetCertificateChainSize(certificateInfo);
    7170
     
    368367{
    369368    auto host = createString(adoptWK(WKProtectionSpaceCopyHost(protectionSpace)).get());
    370     auto pem = createPEMString(protectionSpace);
     369    auto certificateInfo = adoptWK(WKProtectionSpaceCopyCertificateInfo(protectionSpace));
     370    auto verificationError = WKCertificateInfoGetVerificationError(certificateInfo.get());
     371    auto description = createString(adoptWK(WKCertificateInfoCopyVerificationErrorDescription(certificateInfo.get())).get());
     372    auto pem = createPEMString(certificateInfo.get());
    371373
    372374    auto it = m_acceptedServerTrustCerts.find(host);
     
    374376        return true;
    375377
    376     if (askServerTrustEvaluation(hwnd(), pem)) {
     378    std::wstring textString = L"[HOST] " + host + L"\r\n";
     379    textString.append(L"[ERROR] " + std::to_wstring(verificationError) + L"\r\n");
     380    textString.append(L"[DESCRIPTION] " + description + L"\r\n");
     381    textString.append(pem);
     382
     383    if (askServerTrustEvaluation(hwnd(), textString)) {
    377384        m_acceptedServerTrustCerts.emplace(host, pem);
    378385        return true;
  • trunk/Tools/TestWebKitAPI/Tests/WebKit/curl/Certificates.cpp

    r244541 r258728  
    9090    auto size = WKCertificateInfoGetCertificateChainSize(certificateInfo.get());
    9191    ASSERT_EQ(size, 2);
    92     ASSERT_TRUE(isSamePEM(WKCertificateInfoCopyCertificateAtIndex(certificateInfo.get(), 0), PEM1));
    93     ASSERT_TRUE(isSamePEM(WKCertificateInfoCopyCertificateAtIndex(certificateInfo.get(), 1), PEM2));
     92    ASSERT_EQ(WKCertificateInfoGetVerificationError(certificateInfo.get()), 0);
     93    ASSERT_TRUE(WKStringIsEqualToUTF8CString(adoptWK(WKCertificateInfoCopyVerificationErrorDescription(certificateInfo.get())).get(), "ok"));
     94    ASSERT_TRUE(isSamePEM(adoptWK(WKCertificateInfoCopyCertificateAtIndex(certificateInfo.get(), 0)).get(), PEM1));
     95    ASSERT_TRUE(isSamePEM(adoptWK(WKCertificateInfoCopyCertificateAtIndex(certificateInfo.get(), 1)).get(), PEM2));
    9496}
    9597
Note: See TracChangeset for help on using the changeset viewer.