gpt4 book ai didi

c++ - 如何使 OpenSSL 使用 http 而不是 https?

转载 作者:太空狗 更新时间:2023-10-29 23:29:02 27 4
gpt4 key购买 nike

所以我想要的很简单——我喜欢 openSSL api。我找到了一些 simple code to begin with为了学习它。我对服务器创建的东西很陌生。我想知道 - 如何让 OpenSSL 使用简单的 http 而不是 https?我的意思是我想提供相同的服务,能够在需要时跳转到 https,但没有保护它的 http 版本。

我的意思是我很高兴能这么说

 SSLServer server("cert", "pkey", 1420);

// Set the thread function.
server.SetPthread_F(conn_thread);

我希望我可以为不 protected http 服务创建做同样的事情。

经过一些满意的回答后,我明白我将编辑主要问题:

如何只保留/使用 OpenSSL 库的非阻塞 TCP 服务器部分?主要目标是一个跨平台的小型且使用简单的 TCP 服务器,在其上很容易实现 http 和 http costumized analogs

所以如果我们看例子:

#include <openssl/ssl.h>
#include <openssl/err.h>
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include "sslserver.h"

#define REPLY "<html><body>Metalshell.com OpenSSL Server</body></html>"
#define MAX_PACKET_SIZE 1024

// Called when a new connection is made.
void *conn_thread(void *ssl) {
int fd = SSL_get_fd((SSL *)ssl);

if(SSL_accept((SSL *)ssl) == -1) {
ERR_print_errors_fp(stderr);
} else {
char cipdesc[128];
SSL_CIPHER *sslciph = SSL_get_current_cipher((SSL *)ssl);

cout << "Encryption Description:\n";
cout << SSL_CIPHER_description(sslciph, cipdesc, sizeof(cipdesc)) << endl;

char buff[MAX_PACKET_SIZE];
// Wait for data to be sent.
int bytes = SSL_read((SSL *)ssl, buff, sizeof(buff));
buff[bytes] = '\0';

// Show the browser request.
cout << "Recieved: \n" << buff << endl;

// Send the html reply.
SSL_write((SSL *)ssl, REPLY, strlen(REPLY));
}

// Tell the client we are closing the connection.
SSL_shutdown((SSL *)ssl);

// We do not wait for a reply, just clear everything.
SSL_free((SSL *)ssl);
close(fd);

cout << "Connection Closed\n";
cout << "---------------------------------------------\n";

pthread_exit(NULL);
}

int main() {
SSLServer server("cert", "pkey", 1420);

// Set the thread function.
server.SetPthread_F(conn_thread);

while(1) {
/* Wait for 10 seconds, and if no one trys
* to connect return back. This allows us to do
* other things while waiting.
*/
server.CheckClients(10);
}

return 0;
}

我们的服务器应该做些什么来接受所有连接,而不仅仅是 ssl 连接(如果可能的话,考虑完整的请求)并向它们发送回复?

最佳答案

HTTPS 带有 SSL 的简单 HTTP(其实现是 OpenSSL 的重点)。 HTTPS 中的 S 代表安全。

不要在不需要 SSL 时使用 OpenSSL API。

关于c++ - 如何使 OpenSSL 使用 http 而不是 https?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4640315/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com