Tag: ssl

为什么我的服务器总是响应“没有证书”?

我正在尝试使用以下的SSL客户端/服务器示例: http : //simplestcodings.blogspot.com.br/2010/08/secure-server-client-using-openssl-in-c.html来创建安全连接使用SSLv3,但没有成功。 我更改了客户端以尝试在客户端加载证书,添加了服务器示例中存在的LoadCertificates函数。 我按照本教程创建了证书。 我的问题是,当我连接到服务器时,客户端可以看到有关服务器证书的信息,但服务器从不加载有关客户端证书的信息。 这是我的客户端代码: //SSL-Client.c #include #include #include #include #include #include #include #include #include #include #define FAIL -1 //Added the LoadCertificates how in the server-side makes. void LoadCertificates(SSL_CTX* ctx, char* CertFile, char* KeyFile) { /* set the local certificate from CertFile */ if ( SSL_CTX_use_certificate_file(ctx, CertFile, SSL_FILETYPE_PEM) <= 0 ) { […]

使用WinHTTP API锁定证书

是否可以使用Win32 WinHTTP API实现证书固定,如果是,如何实现? 即,我如何根据“已知良好”证书检查返回的服务器证书,最好不必将证书永久写入本地证书存储区。

使用libssl编程的任何好例子?

我想知道是否有人知道使用libssl作为编程库的任何好例子。 它只是通过libssl的代码挖掘试图理解它而烦人。 在最糟糕的情况下,我会继续@尝试和错误。

为libcurl添加自签名SSL证书

我在我的C应用程序中使用libcurl与我设置的HTTPS服务器进行通信。 我在该服务器上生成了一个我希望与curl一起使用的自签名证书。 我知道将CURLOPT_SSL_VERIFYPEER设置为0以绕过SSLvalidation,但我希望将生成的证书添加到curl的“有效”CA证书中。 我已尝试将CURLOPT_CAPATH和CURLOPT_SSLCERT设置为服务器SSL公钥的位置,但无法通过validation。 如何添加自己的CA /自签名证书,以便libcurl成功validation它?

未调用SSL_CTX_set_tlsext_servername_callback回调函数

我正在编写一个https服务器,我需要在使用SNI的ssl_accept()之前从客户端获取主机名。 我使用SSL_CTX_set_tlsext_servername_callback()来接收主机名,但根本不会调用回调。 这是我的代码的一部分 // Server Name Indication callback from OpenSSL static int serverNameCallback(SSL *ssl, int *ad, void *arg) { if (ssl == NULL) return SSL_TLSEXT_ERR_NOACK; const char* servername = SSL_get_servername(ssl, TLSEXT_NAMETYPE_host_name); printf(“ServerName: %s\n”, servername); } int main() { //some code const SSL_METHOD *method; SSL_CTX *ctx; method = SSLv3_server_method(); ctx = SSL_CTX_new(method); if ( ctx == […]

对OpenSSL非阻塞I / O感到困惑

通常,OpenSSL库(C API)似乎提供了两种方法来执行所有操作:您可以使用根据自己的喜好配置的普通系统套接字,也可以使用类似于流的OpenSSL BIO对象。 但是,我经常对一些重复的function感到困惑。 例如,如何使SSL连接无阻塞? 一种方法似乎是简单地访问底层文件描述符并使用fcntl将其设置为非阻塞。 但是还有一个名为BIO_set_nbio的OpenSSL API BIO_set_nbio ,它接收一个BIO*对象并将其设置为非阻塞模式。 那么设置非阻塞SSL套接字的最佳方法是什么? 如果您将OpenSSL传递给已通过fnctl设置为非阻塞模式的本机文件描述符会发生什么? 你还需要专门调用BIO_set_nbio来使BIO对象无阻塞吗?

OpenSSL中的Premaster密钥和主密钥

我有以下价值观: 客户端随机字节 服务器随机字节 前主秘密 我不想使用像SSL,SSL_CTX等function。我想要的是,只要我有三个数字,我想从它们计算主数字。 如何使用OpenSSL计算c中的主密钥? 在RFC中指定的PRF的OpenSSL C库中是否有任何function? 谢谢。

使用OpenSSL从内存中读取公钥/私钥

我在我的项目中使用公钥/私钥来加密/解密一些数据。 我在服务器上托管公钥(“public.pem”)。 “public.pem”看起来像这样: —–BEGIN PUBLIC KEY—– ….. ….. —–END PUBLIC KEY—– 我编写了一个客户端,下载此公钥并将其保存到磁盘,然后使用文件描述符将OpenSSL的PEM_read_RSA_PUBKEY()调用到该文件。 此操作很有效,结果是一个准备加密的RSA对象。 我想避免每次都将公钥写入磁盘(因为我已经在内存中有缓冲区)。 如何在不将缓冲区保存到磁盘的情况下执行相同的操作? 我注意到一个名为PEM_read_bio_RSAPublicKey()的函数,但我不确定它是否使用了BIO结构。 我在正确的道路上吗? 所以真正的问题是:如何直接从内存而不是文件描述符中读取RSA对象的公钥/私钥。

如何使用基于OpenSSL的客户端提取预主密钥?

我有一个使用OpenSSL 1.0.2的应用程序,我想用Wireshark检查流量。 Wireshark可以(据称)解密TLS对话,前提是您提供了预主密钥。 如果我使用像TLS_RSA_WITH_AES_256_CBC_SHA256这样的密码套件; 任何人都可以告诉我如何从SSL或SSL_CTX结构中获取pre-master秘密? 我可以在SSL对象中破解不透明的结构 – 这不适用于产品中的任何产品; 我只是想知道如何为Wireshark填充一个pre-master密文件。

链接OpenSSL时对t1sl_steup_key_block的未定义引用

我遇到了将OpenSSL库链接到现有项目的问题。 我在哪里弄错了? 以下是我遵循的步骤。 我已下载SSL库,已配置并安装它。 它安装在/usr/local/ssl 。 2)我已经将/usr/local/ssl/lib libcrypto.a和libssl.a复制到我的项目中,比如/mnt/linux/bla/bla/lib 。 3)然后我编辑make文件并在那里添加了libssl libcrpto的路径。 添加的路径是项目中的一个,如/mnt/linux/bla /bla 3)制作 4)通过光滑编辑构建项目 当它构建时,我得到一个很长的错误链,就像 ../lib/libssl.a(t1_enc.o) :In function ‘t1sl_steup_key_block: undefined ref 现在,我想将.a文件复制到项目中可能会有问题。 有没有替代方案,或者我应该使用ln -s将.a文件/usr/local/openssl/lib到我的项目库文件夹中? 以下是错误。 Debug/FC5/m2pa.o -ldl -lpthread -ltdapi ../septel/gctlib.lib ../lib/libpq.a ../asn1/lib/libasn1per.a ../mysql/lib/libmysqlclient.a -L../lib ../asn1/lib/libasn1rt.a -lm -lcrypt -lcrypto -lssl -rdynamic ../lib/libssl.a(ssl_lib.o): In function `SSL_set_quiet_shutdown’:ssl_lib.c:(.text+0x670): multiple definition of `SSL_set_quiet_shutdown’ ../mysql/lib/libmysqlclient.a(ssl.o):ssl.cpp:(.text+0x125c): first defined here /usr/bin/ld: Warning: […]