OPENSSL如何加载电子证书

yuechuan 2009-05-20 09:13:29
小弟目前正在学习OPENSSL,在摸索中有以下一点疑问,请大家赐教
OPENSSL的Demo 中关于SSL通讯的例子是这么写的(客户端程序)

ssl = SSL_new (ctx); CHK_NULL(ssl);
SSL_set_fd (ssl, sd);
err = SSL_connect (ssl); CHK_SSL(err);

/* Following two steps are optional and not required for
data exchange to be successful. */

/* Get the cipher - opt */

printf ("SSL connection using %s\n", SSL_get_cipher (ssl));

/* Get server's certificate (note: beware of dynamic allocation) - opt */

server_cert = SSL_get_peer_certificate (ssl);

CHK_NULL(server_cert);
printf ("Server certificate:\n");

str = X509_NAME_oneline (X509_get_subject_name (server_cert),0,0);
CHK_NULL(str);
printf ("\t subject: %s\n", str);
OPENSSL_free (str);

str = X509_NAME_oneline (X509_get_issuer_name (server_cert),0,0);
CHK_NULL(str);
printf ("\t issuer: %s\n", str);
OPENSSL_free (str);

/* We could do all sorts of certificate verification stuff here before
deallocating the certificate. */

X509_free (server_cert);

/* --------------------------------------------------- */
/* DATA EXCHANGE - Send a message and receive a reply. */

err = SSL_write (ssl, "Hello World!", strlen("Hello World!")); CHK_SSL(err);

err = SSL_read (ssl, buf, sizeof(buf) - 1); CHK_SSL(err);
buf[err] = '\0';
printf ("Got %d chars:'%s'\n", err, buf);
SSL_shutdown (ssl); /* send SSL/TLS close_notify */

/* Clean up. */

closesocket(sd);
SSL_free (ssl);
SSL_CTX_free (ctx);



很显然,根据注释也可以看到,其获得的电子证书实际上没有产生作用,并不影响最后的数据交换,我把关于server_cert的代码都屏蔽掉也能与服务器通讯
请问各位,电子证书里面不是包含了公钥嘛?为什么没有电子证书也能SSL通讯呢? 我应该怎么样才能加载电子证书与服务器进行安全连接
...全文
137 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
mewei 2010-05-20
  • 打赏
  • 举报
回复
Openssl 中没有加载电子证书只代表认证不能通过,但前面建立的安全通道还是可以用的,这根服务器设置的安全属性有关.
僵哥 2009-05-21
  • 打赏
  • 举报
回复
SSL_CTX_set_verify有三个参数,我这里只写了两个,另一个是一个Callback,更详细的内容,建议参考OpenSSL的相关资料.
僵哥 2009-05-21
  • 打赏
  • 举报
回复
[Quote=引用楼主 yuechuan 的帖子:]
很显然,根据注释也可以看到,其获得的电子证书实际上没有产生作用,并不影响最后的数据交换,我把关于server_cert的代码都屏蔽掉也能与服务器通讯
请问各位,电子证书里面不是包含了公钥嘛?为什么没有电子证书也能SSL通讯呢? 我应该怎么样才能加载电子证书与服务器进行安全连接[/Quote]
这段代码只是演示如何获取对端电子证书的信息.电子证书里面包含的就是公钥.电子证书在SSL通讯当中并不是必须的,除非至少任何一端有强制要求使用电子证书.

你可以调用SSL_CTX_set_verify(ctx,OPENSSL_SSL_VERIFY_PEER)对对端进行证书校验,还可以调置OPENSSL_SSL_VERIFY_FAIL_IF_NO_PEER_CERT强制要求对端使用证书等等,这些选项是可以通过or进行叠加的.
jian_tian_yang 2009-05-21
  • 打赏
  • 举报
回复
帮楼主顶一下
yuechuan 2009-05-21
  • 打赏
  • 举报
回复
谢谢,我再研究研究看看
yuechuan 2009-05-20
  • 打赏
  • 举报
回复
自己顶一下

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧