Tag: ssl

使用c / c ++发送和validationSSL证书

我实际上正致力于协议安全性。 我需要发送证书并在另一侧validation。 现在这就是我的计划: 1像普通数据流一样发送证书链 2.在另一侧捕获它并将其存储在char []缓冲区中 现在,如何从此char []缓冲区validation证书并提取所需的参数? 我需要用c / c ++。

Java SSLSocket握手失败

我正在尝试找到一种方法来建立使用SSL的Java客户端和C服务器的连接。 这是java客户端: import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.OutputStreamWriter; import javax.net.ssl.SSLSocket; import javax.net.ssl.SSLSocketFactory; public class Main { public static void main(String[] args) throws IOException { SSLSocketFactory sslsockfact = (SSLSocketFactory) SSLSocketFactory.getDefault(); SSLSocket sslsocket = (SSLSocket) sslsockfact.createSocket( args[0], Integer.parseInt(args[1])); sslsocket.startHandshake(); System.in.read(); } } 它只是建立连接和执行握手的几个函数,但我收到此错误: Exception in thread “main” javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure at […]

如何检测之前连接的SSL / TCP套接字上的Internet断开连接?

我有一个阻塞基于select()的SSL_read()的线程。 主线程在需要时使用SSL_write()写入。 在unit testing期间,我发现了一个问题: 客户端TCP套接字connect()到SSL上的服务器(TLS) 一段时间后,禁用互联网 在客户端TCP / SSL套接字上写一些数据 即使没有SSL_write() , SSL_write()返回正确的写入字节数,而不是0或某些错误。 这种互联网断开是任意的,既不太高也不太低。 我的期望是,每当互联网断开连接时,套接字应该生成一些有趣的事件,这是可检测的,我将停止套接字+ SSL连接。 如果我必须建立一些客户端 – 服务器手工协议,那么这是可能的。 实现此类互联网检测的最佳方式是什么? 期望具有较少CPU周期和较少客户端服务器通信的解决方案。 我确信,这不是一个非常特殊的问题,因此必须先解决。 [PS:客户端套接字在Android和iOS等移动平台上开放,但我想知道一般解决方案。]

SSL_CTX_set_verify()回调和当前深度

我在C中为SSL_CTX_set_verify()编写自己的回调函数以执行其他证书检查(当preverify_ok参数为1 )。 但是,我只想对叶证书(depth = 0)执行检查。 有一个函数X509_STORE_CTX_get_error_depth()可以获取错误的深度; 但即使没有错误,我也想要当前的深度,所以只有当深度= 0时我才能进行额外的检查。 (注意,函数SSL_CTX_get_verify_depth()返回深度限制而不是当前深度。) 有什么办法可以做我想要的吗?

OpenSSL x509证书:使用X509_add1_ext_i2d()添加扩展名

语境: 我正在使用OpenSSL中的API生成x509证书。 我首先创建这样的X509结构: X509 *x509 = X509_new(); // Assume no errors 我想做什么: 现在我想为此证书添加扩展名。 具体来说,我想将“扩展密钥用法”扩展名设置为值serverAuth,clientAuth 。 为此,我尝试使用具有以下签名的OpenSSL函数x509_add1_ext_i2d() : X509_add1_ext_i2d(X509 *x, int nid, void *value, int crit, unsigned long flags) 我正在调用该函数传递一个C字符串的value ,我认为这是不正确的。 这是我正在制作的电话: X509_add1_ext_i2d(x509, NID_ext_key_usage, “serverAuth,clientAuth”, 0, 0) 发生了什么: 当该行代码运行时,我得到一个EXC_BAD_ACCESS (code=EXC_i386_GPFLT)exception。 我假设那是因为我传入的value必须是某种特殊的东西(一个八位字符串?某种其他的OpenSSL值?) 我需要的: 为了正确地将该扩展名设置为字符串值serverAuth,clientAuth我需要为value参数传递什么? 或者,或者,为什么我得到列出的例外? 注意:如果我删除此行并尝试生成没有扩展名的证书(其他属性,如名称,到期日期等,我为了简洁而在此处排除),它可以正常工作。 我花了一整天的时间来倾听OpenSSL(荒谬可怜)的文档和谷歌搜索。 我能找到的所有内容都讨论了如何从命令行而不是代码中添加证书扩展。 我无法追踪这个函数期望在value参数中看到的内容。

SMTPS:OpenSSL – SSL例程:SSL23_GET_SERVER_HELLO:未知协议s23_clnt.c:787:

我正在使用OpenSSL来加密一些硬件发送的电子邮件。 但是,每当我尝试调用SSL_connect()时,我都会得到:SSL例程:SSL23_GET_SERVER_HELLO:未知协议 发送“EHLO”和“STARTTLS”后,我调用以下函数: SSL_CTX *ctx = NULL; SSL *ssl = NULL; void CreateTLSSession(int sockfd) { printf(“///////////////creating TLS Session/////////////////////\n”); SSL_library_init(); SSL_load_error_strings(); OpenSSL_add_all_algorithms(); ctx = SSL_CTX_new(SSLv23_client_method()); if (ctx == NULL) { printf(“failed to initialize context\n”); return; } SSL_CTX_set_options(ctx, SSL_OP_NO_SSLv2); ssl = SSL_new(ctx); if (!SSL_set_fd(ssl, sockfd)) { printf(“failed to bind to socket fd\n”); return; } if (SSL_connect(ssl) < […]

Openssl:在SSL_CTX_load_verify_locations API中使用CApath参数时,证书validation失败

我正在尝试与服务器计算机建立TLS连接。 我使用openssl CLI命令创建了根CA证书和服务器证书。 我创建了服务器证书,其通用名称与其IP地址相同。 根CA证书的通用名称是服务器的FQDN。 我正在使用openssl库API建立与服务器的连接。 我正在使用API int SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile, const char *CApath) 用于设置CA文件查找路径。 当我使用CAfile参数指定我的CA文件的路径时,一切正常,将CApath参数保留为NULL。 但是,如果我使用CApath参数指定包含CA文件的目录的路径,将CAfile参数保留为NULL,则由于证书validation错误,连接将失败。 当我使用wireshark捕获数据包时,我发现我的客户端代码正在从服务器发送“服务器问候”的TLS响应“未知CA”。 我使用了在成功连接中使用的相同CA证书文件。 根据我在探索openssl库源代码时的观察,我推断,在我的情况下,CA文件不被认为是有效的,因此由于某些未知原因而未被库API加载。 有人可以告诉我原因,如果可能的话,可以解决这个问题吗?

如何在C中使用POP3 over SSL

我想知道并理解使用普通c语言从pop3服务器获取邮件所涉及的步骤

设计EAP-TLS客户端问候消息

我正在尝试设计启动EAP-TLS握手的第一个数据包。 这就是我的数据包当前的样子: 我通过在C中手动填充具有相应信息的缓冲区来设计EAP部分。 我使用OpenSSL派生的TLS部分,如本问题所示。 然后我去了RFC并在数据包中添加了4个八位字节长度字段和TLS标志。 但wireshark拒绝接受它! 我尝试逐字节地将TLS数据与通过TCP发生的TLS连接进行比较,我可以看到客户端hello(hex为16),TLS版本(0x0301:TLS 1.0)的字段顺序相同。 你能帮我辨别我哪里出错吗? 谢谢! 此外,如果有人知道一个客户端可以生成这些消息,所以我可以比较它们,这也是有益的。 谢谢!

什么是包属性以及如何生成它们?

在将一些证书从密钥库转换为openssl / pem时,我第一次注意到证书之前有“Bag Attributes”。 看起来像这样: Bag Attributes friendlyName: CN=PositiveSSL CA,O=Comodo CA Limited,L=Salford,ST=Greater Manchester,C=GB subject=/C=GB/ST=Greater Manchester/L=Salford/O=Comodo CA Limited/CN=PositiveSSL CA issuer=/C=US/ST=UT/L=Salt Lake City/O=The USERTRUST Network/OU=http://www.usertrust.com/CN=UTN-USERFirst-Hardware 他们是否提供任何function? 我注意到我喜欢它们,因为它们使我的链文件(证书的串联)更加清晰。 可悲的是,我下载的ca证书没有它们。 那么我该如何生成它们呢?