Tag: openssl

C中的x509证书validation

我有DER和PEM格式的证书,我的目标是检索Issuer和Subject的字段,并使用CA公钥validation证书,同时使用根公钥validationCA证书。 我能够检索发行人和主题的所有细节,但无法validation证书。 使用的API: x509 = d2i_X509_fp (fp, &x509); //READING DER Format x509 = PEM_read_X509 (fp, &x509, NULL, NULL); //READING PEM Format //to retrieve the Subject: X509_NAME_oneline(X509_get_subject_name(x509), subject, sizeof (subject)); //to retrieve the Issuer: X509_NAME_oneline(X509_get_issuer_name(x509), issuer, sizeof (issuer)); //To store the CA public key (in unsigned char *key) that will be used to verify the //certificate […]

使用Memory BIO直接读/写握手数据

我需要创建一个OpenSSL连接,我可以直接读/写握手数据。 原因是握手数据将以UDP连接方式传输(DTLS不是一个选项,因为数据不是直接在数据报中,而是在另一个协议包内,如果你好奇则是EAP )。 到目前为止,我已经创建了一个OpenSSL连接,但我甚至无法读取客户端的握手以发送到服务器。 在我的研究中,我发现我需要一个Memory BIO来读取/写入连接,但无法弄清楚如何提取握手数据。 以下是我初始化客户端连接的方法: SSL_library_init(); SSL_load_error_strings(); OpenSSL_add_all_algorithms(); ctx = SSL_CTX_new(SSLv3_client_method()); SSL_CTX_set_verify(ctx, SSL_VERIFY_NONE, NULL); ssl = SSL_new(ctx); rbio = BIO_new(BIO_s_mem()); wbio = BIO_new(BIO_s_mem()); SSL_set_bio(ssl, rbio, wbio); SSL_set_connect_state(ssl); 我尝试过doint SSL_connect来启动握手: int ret = SSL_connect(ssl); 但返回-1 ,并执行SSL_get_error(ssl, res)我得到一个错误代码2 ,然后我用该代码执行ERR_error_string并得到: error:00000002:lib(0):func(0):system lib 此外,如果我使用SSL_do_handshake而不是SSL_connect我会得到完全相同的错误。 我已经能够通过TCP设置OpenSSL连接,但从未使用Memory BIO进行此操作,因此对此的任何帮助都将非常感激。 谢谢!