0

Apple Security API 初期化の次のコードがあります。

    OSStatus status = noErr;
    sslContext = SSLCreateContext(kCFAllocatorDefault, kSSLClientSide, kSSLStreamType);
    if (sslContext == nullptr)
    {
        throw std::runtime_error("cannot create ssl context");
    }

    status = SSLSetIOFuncs(sslContext, socketRead, socketWrite);
    if (status != noErr)
    {
        throw std::runtime_error("cannot set ssl io functions");
    }

    status = SSLSetConnection(sslContext, reinterpret_cast<void*>(&handle));
    if (status != noErr)
    {
        throw std::runtime_error("cannot set ssl connections");
    }

    status = SSLSetPeerDomainName(sslContext, address.c_str(), address.length());
    if (status != noErr)
    {
        throw std::runtime_error("cannot set ssl peer domain name");
    }

    status = SSLSetSessionOption(sslContext, kSSLSessionOptionBreakOnServerAuth, true);
    if (status != noErr)
    {
        throw std::runtime_error("cannot set ssl options");
    }

    status = SSLHandshake(sslContext);
    if (status != noErr)
    {
        throw std::runtime_error("cannot perform ssl handshake");
    }

この行で:

status = SSLHandshake(sslContext);

私の SSLWriteFunc コールバックが呼び出されます。SSLWrite 経由で 174 バイトを送信しようとしますが (送信するつもりはありませんでした)、とにかく失敗します。しかし、SSLHandshake に関するドキュメントには、「正常に戻ると、セッションは関数 SSLRead( : : : :) および SSLWrite( : : : ) を使用した通常の安全な通信の準備ができている」と書かれています。したがって、私の場合、このメソッドからの戻りはなく、SSLWriteFunc が突然 SSLWrite 経由でデータを送信しようとしました。私は自分が間違っていることを理解していません。みんな私を助けてください。

4

1 に答える 1