要在Linux上使用OpenSSL实现HTTPS,你需要遵循以下步骤:
sudo apt-get update
sudo apt-get install openssl
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365
按照提示输入相关信息。这将在当前目录下生成cert.pem
(证书文件)和key.pem
(私钥文件)。
server.c
的C程序,用于创建一个简单的HTTP服务器。将以下代码粘贴到文件中:#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define PORT 443
int main() {
int server_fd, client_fd;
struct sockaddr_in server_addr, client_addr;
socklen_t addr_size;
char buffer[1024] = {0};
// 创建socket
if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {
perror("socket failed");
exit(EXIT_FAILURE);
}
// 绑定socket
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = INADDR_ANY;
server_addr.sin_port = htons(PORT);
if (bind(server_fd, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
perror("bind failed");
exit(EXIT_FAILURE);
}
// 监听连接
if (listen(server_fd, 3) < 0) {
perror("listen");
exit(EXIT_FAILURE);
}
addr_size = sizeof(client_addr);
// 接受连接
if ((client_fd = accept(server_fd, (struct sockaddr *)&client_addr, &addr_size)) < 0) {
perror("accept");
exit(EXIT_FAILURE);
}
// 读取客户端请求
read(client_fd, buffer, sizeof(buffer));
// 发送HTTPS响应
const char *response = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\nConnection: close\r\n\r\n<html><body><h1>Hello, HTTPS!</h1></body></html>";
send(client_fd, response, strlen(response), 0);
// 关闭连接
close(client_fd);
close(server_fd);
return 0;
}
gcc server.c -o server
openssl s_server -www -cert cert.pem -key key.pem -port 443
现在,你的HTTPS服务器应该在端口443上运行,并使用自签名证书。请注意,由于证书是自签名的,浏览器可能会显示安全警告。在生产环境中,请确保使用受信任的CA签发的证书。
要测试HTTPS服务器,请在浏览器中访问https://localhost
。