【问题标题】:openssl header sslopenssl 头文件 ssl
【发布时间】:2010-03-29 08:16:40
【问题描述】:

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

谢谢

【问题讨论】:

    标签: ssl openssl


    【解决方案1】:

    我假设您说的是 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;
        }
    

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

    【讨论】:

    • 如果我不想使用 SSL_read 和 SSL_write 方法来获得与套接字的连接,只需使用 POSIX 中常见的读写方法,我确信数据是 TLS v1。我应该怎么做或有任何手册或演示来加密和解密我的数据并通过普通读写发送它?。
    • SSL_read() 不直接从套接字读取。您必须提供一个缓冲区(最终使用经典 POSIX 套接字填充)。 SSL_write() 封装了 sendto() 或 send() 调用。您必须了解,使用 TLS 不仅仅是加密数据并将其发送到另一台主机:SSL_read() 和 SSL_write() 背后有一个复杂的机制来处理握手、密钥交换等。也许如果您告诉我们为什么要避免使用 SSL_read() 和 SSL_write(),我们或许可以找到另一种解决方案。
    • 在某些情况下,我想制作一些我自己的某些header没有加密的数据,中间是TLS数据。换句话说,我只想要特定的加密/解密功能而不将它与 ssl 标头捆绑在一起。谢谢
    • 我做了同样的事情,所以这绝对是可能的。基本上,TLS 使用 posix 套接字进行通信。您可以访问此套接字并执行常规 sendto()(不使用 SSL_write()):只要您不向接收方的 SSL_read() 提供未加密的数据,您就会很安全。这就是我的功能可以帮助你的地方;)
    • 天哪,是这样吗?..嗯,我要试试。我只是觉得我没有太多时间深入研究 ssl 代码 n 我找不到任何合适的手册。还是谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-27
    • 2012-08-30
    • 1970-01-01
    • 2022-01-22
    相关资源
    最近更新 更多