WinInet (MFC) の SSL通信 で 開発中に自己署名証明書(オレオレ証明書)を利用する場合のコード

サーバー等とSSL通信を利用するアプリケーションやシステムで、ローカルでの開発中や、ステージング環境でのテスト中は正規のSSLサーバー証明書を利用できない場合が多いと思う。
WinInetを使用した通信 で MFC ライブラリを使用する場合のサンプルコードを下記に記載する。

開発中に、自己署名証明書(オレオレ証明書) と 期限切れ証明書を認める場合のコード。
※例外処理などは含めてない。 もう少しまとまったコードは 最後の 詳細記事 を 参照。

CHttpConnection* pConnection = NULL;
    CInternetSession session;
    CHttpFile* pFile = NULL;
    try
    {
        pConnection = session.GetHttpConnection(
            strServer,
            INTERNET_FLAG_RELOAD | INTERNET_FLAG_DONT_CACHE ,
            nPort,
            NULL,
            NULL
        );

        DWORD dwFlags = INTERNET_FLAG_EXISTING_CONNECT | INTERNET_FLAG_RELOAD | INTERNET_FLAG_DONT_CACHE;
        BOOL bSecure = m_strConnectUrl.MakeLower().Find(_T("https")) == 0;
        if (bSecure)
        {
            dwFlags |= INTERNET_FLAG_SECURE;
#if _DEBUG
            // 自己署名証明書(オレオレ証明書)と期限切れ証明書を認める
            dwFlags |= INTERNET_FLAG_IGNORE_CERT_DATE_INVALID | INTERNET_FLAG_IGNORE_CERT_CN_INVALID;
#endif

        }

        pFile = pConnection->OpenRequest(
            CHttpConnection::HTTP_VERB_POST,
            strObject,
            NULL,
            1,
            NULL,
            _T("HTTP/1.1"),
            dwFlags
        );

        if (bSecure)
        {
#if _DEBUG
            // 自己署名証明書(オレオレ証明書)を認める
            DWORD dwFlagSec;
            pFile->QueryOption(INTERNET_OPTION_SECURITY_FLAGS, dwFlagSec);
            dwFlagSec |= SECURITY_FLAG_IGNORE_UNKNOWN_CA;
            pFile->SetOption(INTERNET_OPTION_SECURITY_FLAGS, dwFlagSec);
#endif

        }

        if (!pFile->AddRequestHeaders(
                _T("Accept: */*\r\nContent-Type: application/octet-stream\r\n")))
        {
            ASSERT(0);
            CLOSE_HTTPSESSION(pFile, pConnection, (&session));
            DELETE_HTTPSESSION(pFile, pConnection);
            return ERROR_NET_API;           
        }

詳細記事:

ActiveX から IIS(ASP.NET) への WinInet を 使用した HTTP通信
https://techwing.wordpress.com/2009/06/21/activex-%e3%81%8b%e3%82%89-iisasp-net-%e3%81%b8%e3%81%ae-wininet-%e3%82%92-%e4%bd%bf%e7%94%a8%e3%81%97%e3%81%9f-http%e9%80%9a%e4%bf%a1/

広告

コメントを残す

コメントを投稿するには、以下のいずれかでログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中