У меня есть программа C (простой веб-сервер), которая прослушивает порт 8080 для входящих HTTP-запросов. Это прекрасно работает, если я сделаю простой запрос http://
, я вижу заголовки запроса. Но когда я делаю запрос https://
SSL / TLS, я вижу некоторые гиббери sh ?????
Вместо этого я ожидаю увидеть сообщение рукопожатия приветствия клиента 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;
}