SSL_写入默认行为

SSL_写入默认行为,ssl,encryption,openssl,Ssl,Encryption,Openssl,目前我正在开发一些基本的OpenSSL。我对SSL_写入和SSL_读取的基本行为感到困惑。文档中没有明确说明数据是如何加密/解密的。我是什么意思?一旦设置了SSL_CTX并分配了文件描述符,SSL_写入是默认加密数据还是调用加密函数,还是必须手动完成?我必须显式调用一些加密函数吗?SSL_读取是否也是如此?我需要更深入地了解SSL_写/读会自动做什么,不自动做什么,或者如果有问题,我可以求助于哪些来源 下面是我正在使用的一个示例 例如: SSL *ssl; int client

目前我正在开发一些基本的OpenSSL。我对SSL_写入和SSL_读取的基本行为感到困惑。文档中没有明确说明数据是如何加密/解密的。我是什么意思?一旦设置了SSL_CTX并分配了文件描述符,SSL_写入是默认加密数据还是调用加密函数,还是必须手动完成?我必须显式调用一些加密函数吗?SSL_读取是否也是如此?我需要更深入地了解SSL_写/读会自动做什么,不自动做什么,或者如果有问题,我可以求助于哪些来源

下面是我正在使用的一个示例

例如:

    SSL *ssl;

    int client = accept(server, (struct sockaddr*)&addr, &len);  /* accept connection as usual */
    printf("Connection: %s:%d\n",inet_ntoa(addr.sin_addr), ntohs(addr.sin_port));
    ssl = SSL_new(ctx);              /* get new SSL state with context */
    SSL_set_fd(ssl, client);      /* set connection socket to SSL state */
    Servlet(ssl);         /* service connection */
Servlet调用

void Servlet(SSL* ssl) 
{
    char buf[1024];
    char reply[1024];
    int sd, bytes;
    const char* HTMLecho="<html><body><pre>%s</pre></body></html>\n\n";

    if ( SSL_accept(ssl) == FAIL )     /* do SSL-protocol accept */
        ERR_print_errors_fp(stderr);
    else
    {
        ShowCerts(ssl);        /* get any certificates */
        bytes = SSL_read(ssl, buf, sizeof(buf)); /* get request */
        if ( bytes > 0 )
        {
            buf[bytes] = 0;
            printf("Client msg: \"%s\"\n", buf);
            sprintf(reply, HTMLecho, buf);   /* construct reply */
            SSL_write(ssl, reply, strlen(reply)); /* send reply */
        }
        else
            ERR_print_errors_fp(stderr);
    }
    sd = SSL_get_fd(ssl);       /* get socket connection */
    SSL_free(ssl);         /* release SSL state */
    close(sd);          /* close connection */
}
void Servlet(SSL*SSL)
{
char-buf[1024];
字符回复[1024];
int-sd,字节;
常量char*HTMLecho=“%s\n\n”;
如果(SSL_接受(SSL)=失败)/*是否接受SSL协议*/
错误打印错误fp(stderr);
其他的
{
ShowCerts(ssl);/*获取任何证书*/
bytes=SSL_read(SSL,buf,sizeof(buf));/*get请求*/
如果(字节>0)
{
buf[字节]=0;
printf(“客户端消息:\%s\”\n),buf);
sprintf(reply,HTMLecho,buf);/*构造reply*/
SSL_write(SSL,reply,strlen(reply));/*发送回复*/
}
其他的
错误打印错误fp(stderr);
}
sd=SSL_get_fd(SSL);/*获取套接字连接*/
无SSL(SSL);/*释放SSL状态*/
关闭(sd);/*关闭连接*/
}
我是否必须显式调用某些加密函数,SSL_读取是否也是如此

不会。加密在
SSL\u write
中自动处理,就像在
SSL\u read
中解密一样。两者都使用
SSL
结构,一旦TLS握手完成,该结构包含必要的加密密钥

。。。如果我有问题,我可以求助的来源

这取决于你的问题。
SSL\u read
SSL\u write
都有文档。还有一些很容易找到的例子。能够使用搜索引擎也有助于找到更多信息。如果事情不按预期进行,StackOverflow是获得帮助的好地方

我是否必须显式调用某些加密函数,SSL_读取是否也是如此

不会。加密在
SSL\u write
中自动处理,就像在
SSL\u read
中解密一样。两者都使用
SSL
结构,一旦TLS握手完成,该结构包含必要的加密密钥

。。。如果我有问题,我可以求助的来源


这取决于你的问题。
SSL\u read
SSL\u write
都有文档。还有一些很容易找到的例子。能够使用搜索引擎也有助于找到更多信息。如果出现问题,StackOverflow是一个获得帮助的好地方。

好的,我明白了,所以基本上一切都归结为使用适当的密钥以正确的方式设置SSL上下文,它应该可以工作。@MarkoBencik:是的,使用证书和私钥设置上下文。身份验证、密钥交换和加密由OpenSSL库透明地处理。好的,明白了,所以基本上一切都归结为使用适当的密钥以正确的方式设置SSL上下文,它应该可以工作。@MarkoBencik:是的,使用证书和私钥设置上下文。OpenSSL库透明地处理身份验证、密钥交换和加密。