C++ 如何初始化OpenSSL BIO对象?
我有一个tcp服务器,它检测传入的SSL连接(请参阅),然后执行以下操作:C++ 如何初始化OpenSSL BIO对象?,c++,openssl,C++,Openssl,我有一个tcp服务器,它检测传入的SSL连接(请参阅),然后执行以下操作: BIO* initialize(SSL_CTX *context, int socket){ BIO *bio = NULL; SSL *ssl = SSL_new(context); SSL_set_fd(ssl, socket); if (SSL_accept(ssl) == -1){ return NULL; //error } //what do I
BIO* initialize(SSL_CTX *context, int socket){
BIO *bio = NULL;
SSL *ssl = SSL_new(context);
SSL_set_fd(ssl, socket);
if (SSL_accept(ssl) == -1){
return NULL; //error
}
//what do I do here??
bio = BIO_new_ssl(context, 1); //this seems wrong...
return bio;
}
我不知道如何创建BIO对象,文档也很混乱。感谢您的帮助。谢谢 这是我的一个老学生项目(大约2006年)的摘录。 我希望它能对这个问题有所启发。 我不使用BIO_new_ssl(),而是使用ssl_set_BIO()
SSL\u CTX*CTX=setup\u server\u CTX(“root.pem”,NULL);
SSL_CTX*SSL=SSL_new(CTX);
if(NULL==ssl){
fprintf(stderr,“创建SSL上下文时出错。\n”)
后悔莫及;
}
BIO*acc=BIO_新_接受(端口);
if(BIO_do_accept(acc)=SSL_accept(SSL)){
fprintf(stderr,“接受SSL连接时出错\n”);
转到终点;
}
SSL_写入(SSL,SOME_消息,strlen(SOME_消息));
char buf[buf_SIZE+1]={0};
int ret=SSL_read(SSL,buf,buf_SIZE);
if(ret这是我的一个老学生项目(大约2006年)的摘录。
我希望它能对这个问题有所启发。
我不使用BIO_new_ssl(),而是使用ssl_set_BIO()
SSL\u CTX*CTX=setup\u server\u CTX(“root.pem”,NULL);
SSL_CTX*SSL=SSL_new(CTX);
if(NULL==ssl){
fprintf(stderr,“创建SSL上下文时出错。\n”)
后悔莫及;
}
BIO*acc=BIO_新_接受(端口);
if(BIO_do_accept(acc)=SSL_accept(SSL)){
fprintf(stderr,“接受SSL连接时出错\n”);
转到终点;
}
SSL_写入(SSL,SOME_消息,strlen(SOME_消息));
char buf[buf_SIZE+1]={0};
int ret=SSL_read(SSL,buf,buf_SIZE);
如果(ret我挑战有人找到比OpenSSL更令人困惑的文档。@AdamRosenfield有人曾经告诉我,文档就像性:好的时候,很好;坏的时候,总比没有好。我告诉他们去阅读OpenSSL文档……哦,来吧。实现异步网络I/O usi需要几个小时ng OpenSSL,即使您以前从未使用过它。尽管我根本不会使用BIO:)我要求有人找到比OpenSSL更令人困惑的文档。@AdamRosenfield有人曾经告诉我,文档就像性爱:好的时候,它很棒;坏的时候,它总比没有好。我告诉他们去阅读OpenSSL文档……哦,来吧。使用Op实现异步网络I/O需要几个小时enSSL,即使您以前从未使用过它。尽管我根本不会使用BIO:)这段代码是如何工作的?你不需要调用BIO\u do\u accept
两次吗?一次绑定到端口,第二次接受实际连接,然后再调用BIO\u pop
?只需调用一次BIO\u do\u accept
我认为它就不能工作了。这段代码是如何工作的?你不需要调用BIO\u do\u accept
twice-一次绑定到端口,第二次在BIO_pop
之前接受实际连接?只需一次调用BIO_do_accept
我认为它无法工作。
SSL_CTX *ctx = setup_server_ctx("root.pem", NULL);
SSL_CTX *ssl = SSL_new(ctx);
if (NULL == ssl) {
fprintf(stderr, "Error creating SSL context.\n")
goto err;
}
BIO *acc = BIO_new_accept(port);
if (BIO_do_accept(acc) <= 0) {
fprintf(stderr, "Error accepting connection.\n");
goto err;
}
BIO *client = BIO_pop(acc);
SSL_set_bio(ssl, client, client);
if (0 >= SSL_accept(ssl)) {
fprintf(stderr, "Error accepting SSL connection\n");
goto end;
}
SSL_write(ssl, SOME_MESSAGE, strlen(SOME_MESSAGE));
char buf[BUF_SIZE + 1]= {0};
int ret = SSL_read(ssl, buf, BUF_SIZE);
if (ret <= 0) {
break;
}
/* do some more stuff */
SSL_get_shutdown(ssl);