openssl 标头 ssl

发布于 2024-08-27 02:46:26 字数 50 浏览 3 评论 0原文

在将消息发送到套接字之前,openssl 是否会提供额外的标头?

谢谢

is there additional header which is presented by openssl before sending the message to socket ?

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

感性 2024-09-03 02:46:26

我假设您正在谈论 TLS(“安全 TCP”)。

那么是的。一旦客户端和服务器之间的握手完成,“数据”消息通常以 3 个特殊字节开始(如果我没记错的话),这向 SSL 层表明该帧已加密。

另一方面,您不能假设加密帧的大小与原始帧/数据的大小相同。

此处您将获得 C/C++ 中的示例函数。

    bool isCiphered(const char* buf, size_t buflen)
    {
        if (buflen < 3)
        {
            return false;
        }

        uint8_t c = buf[0];

        switch (c)
        {
            case 0x14:
            case 0x15:
            case 0x16:
            case 0x17:
                {
                    uint8_t v1 = buf[1];
                    uint8_t v2 = buf[2];

                    /* TLS v1 */
                    if ((v1 == 0x03) && (v2 == 0x01))
                    {
                        return true;
                    }

                    /* DTLS v1 */
                    if ((v1 == 0xfe) && (v2 == 0xff))
                    {
                        return true;
                    }

                    break;
                }
        }

        return false;
    }

我必须调整现有的代码,所以我不确定是否可以编译,但您应该明白了。

I assume you're talking about TLS ("Secured TCP").

Then yes. Once the handshake between client and server is done, the "data" messages usually start with 3 special bytes (if I remember well) that indicates to the SSL layer that the frame is ciphered.

On the other hand, you cannot assume that the size of a ciphered frame will be the same of the raw frame/data.

Here you get an example function in C/C++.

    bool isCiphered(const char* buf, size_t buflen)
    {
        if (buflen < 3)
        {
            return false;
        }

        uint8_t c = buf[0];

        switch (c)
        {
            case 0x14:
            case 0x15:
            case 0x16:
            case 0x17:
                {
                    uint8_t v1 = buf[1];
                    uint8_t v2 = buf[2];

                    /* TLS v1 */
                    if ((v1 == 0x03) && (v2 == 0x01))
                    {
                        return true;
                    }

                    /* DTLS v1 */
                    if ((v1 == 0xfe) && (v2 == 0xff))
                    {
                        return true;
                    }

                    break;
                }
        }

        return false;
    }

I had to adapt my existing code so i'm not sure that compiles, but you should get the idea.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文