C++ Can';不要使用openssl服务器,因为密码已过时…或其他…错误\u SSL\u版本\u或\u密码\u不匹配
这个问题比我的上一个问题要简单一些,所以希望我能得到任何回复,比如至少一条评论(请) 我正在尝试使用OpenSSL创建一个简单的tls套接字服务器,但无法完成握手,因为我的服务器没有任何浏览器将使用的密码(这就是我推断的)。Chrome说“C++ Can';不要使用openssl服务器,因为密码已过时…或其他…错误\u SSL\u版本\u或\u密码\u不匹配,c++,openssl,C++,Openssl,这个问题比我的上一个问题要简单一些,所以希望我能得到任何回复,比如至少一条评论(请) 我正在尝试使用OpenSSL创建一个简单的tls套接字服务器,但无法完成握手,因为我的服务器没有任何浏览器将使用的密码(这就是我推断的)。Chrome说“ERR\u SSL\u VERSION\u或\u CIPHER\u MISMATCH”,Firefox说“SSL\u ERROR\u NO\u CYPHER\u OVERLAP”程序本身一直在运行 这是一个相当简单的程序,所以我不知道为什么它会以这种方式失败。
ERR\u SSL\u VERSION\u或\u CIPHER\u MISMATCH
”,Firefox说“SSL\u ERROR\u NO\u CYPHER\u OVERLAP
”程序本身一直在运行
这是一个相当简单的程序,所以我不知道为什么它会以这种方式失败。我的机器上安装的openssl版本是1.1.0l-1~deb9u1
,但我不确定当我使用-lcrypto
时编译器是否实际链接了该版本,或者我将如何确定该版本
int main() {
SSL_library_init();
OpenSSL_add_all_algorithms();
OpenSSL_add_all_ciphers();
SSL_load_error_strings();
SSL_CTX* ctx = SSL_CTX_new(TLSv1_2_server_method());
SSL_CTX_use_certificate_file(ctx, "example-com.cert.pem", SSL_FILETYPE_PEM);
SSL_CTX_use_PrivateKey_file(ctx, "example-com.key.pem", SSL_FILETYPE_PEM);
int sd = socket(PF_INET, SOCK_STREAM, 0);
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(8080);
addr.sin_addr.s_addr = INADDR_ANY;
bind(sd, (struct sockaddr*) & addr, sizeof(addr));
listen(sd, 100);
while (1) {
struct sockaddr_in clientAddr;
socklen_t len = sizeof(clientAddr);
SSL* ssl = SSL_new(ctx);
int clientFD = accept(sd, NULL, NULL);
SSL_set_fd(ssl, clientFD);
SSL_accept(ssl);
char buf[1024];
int bytes = SSL_read(ssl, buf, sizeof(buf));
std::string reply = "HTTP/1.1 301 Moved Permanently\r\nCache-Control: no-store\r\nLocation: https://google.com/ ";
SSL_write(ssl, reply.c_str(), reply.length());
SSL_free(ssl);
close(clientFD);
}
close(sd);
SSL_CTX_free(ctx);
return 0;
}
编辑:根据手册页,应该使用
TLS\u server\u method()
,但结果相同。我还尝试使用了SSL\u CTX\u set\u options()
和SSL\u CTX\u set\u cipher\u list()
,但结果相同。您不也需要包含一些标题吗?顺便说一句,我得到的const SSL\u METHOD*TLSv1\u 2\u server\u METHOD()是不推荐的
。是的,但显然函数TLSv1\u 2\u server\u METHOD()
是不推荐的。我知道的不多,我明白了。这件事我知道的不多。你的证书是最新的吗?也许你需要生成或获取新的证书?嗯。。。我在自己的网页上使用Let's Encrypt’s certs,它们似乎总是有效的。但那是几年前的事了。我知道你可以运行openssl
来显示证书有效的时间段,但我说过,那是很久以前的事了。@TedLyngmo我解决了我的一个问题。二进制文件与源文件不在同一文件夹中,因此证书和pk实际上没有被使用。我只是把它指向了确切的目录。如果你愿意,你可以得到帮助我的答案。如何添加标题?