首页 > 解决方案 > 从 TLS TCP 套接字读取时收到乱码

问题描述

我有一个 C 程序(简单的 Web 服务器),它侦听端口 8080 以获取传入的 HTTP 请求。如果我提出一个简单的http://请求,效果很好,我可以看到请求标头。但是当我发出https://SSL/TLS 请求时,我看到了一些乱码?????

相反,我希望看到 SSL/TLS 客户端问候握手消息。

http://localhost:8080请求:

GET / HTTP/1.1
Host: localhost:8080

https://localhost:8080请求:

???? ???? ??

为什么我没有看到初始化握手消息的 TLS 客户端问候?它尚未加密(至少此时不应加密)

这是我的 C 服务器,我正在使用read( new_socket , buffer, 30000)

// Server side C program to demonstrate HTTP Server programming
#include <stdio.h>
#include <sys/socket.h>
#include <unistd.h>
#include <stdlib.h>
#include <netinet/in.h>
#include <string.h>

#define PORT 8080
int main(void)
{
    int server_fd, new_socket; long valread;
    struct sockaddr_in address;
    int addrlen = sizeof(address);

    char *hello = "HTTP/1.1 200 OK\nContent-Type: text/plain\nContent-Length: 12\n\nHello world!";

    // Creating socket file descriptor
    server_fd = socket(AF_INET, SOCK_STREAM, 0);

    address.sin_family = AF_INET;
    address.sin_addr.s_addr = INADDR_ANY;
    address.sin_port = htons( PORT );

    memset(address.sin_zero, '\0', sizeof address.sin_zero);


    bind(server_fd, (struct sockaddr *)&address, sizeof(address));

    while(1)
    {
        printf("\n+++++++ Waiting for new connection ++++++++\n\n");
        if ((new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen))<0)
        {
            perror("In accept");
            exit(EXIT_FAILURE);
        }

        char buffer[30000] = {0};
        valread = read( new_socket , buffer, 30000);
        printf("%s\n",buffer );
        write(new_socket , hello , strlen(hello));
        printf("------------------Hello message sent-------------------");
        close(new_socket);
    }
    return 0;
}

标签: chttpsslhttpsserver

解决方案


推荐阅读