OPENSSL 中电子证书的有关问题
OPENSSL 中电子证书的问题
小弟目前正在学习OPENSSL,在摸索中有以下一点疑问,请大家赐教
手头一个关于用SSL 服务器端客户端通讯的例子是这么写的(网上关于OPENSSL通讯的好像都是这个例子)
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通讯呢? 我要让服务器端验证客户端的电子证书是否合法,应该怎么作?
------解决方案--------------------
帮顶一下!
------解决方案--------------------
SSL协议可以使用单证书(服务器证书),也可以是用双证书(客户端+服务器证书),两种的根本区别在于双证书中服务器对客户端的身份进行验证。具体的协议原理可以看些资料。
有关你的最后一个问题:“我要让服务器端验证客户端的电子证书是否合法,应该怎么作?”回答如下:
是否合法需要看场合,目前国家对面向公众的数字证书认证中心(CA)是有相关规定的,如果你是用在自己企业内部,应该不存在是否合法的问题。简单的例子:在自己家里光屁股合法,但是到大街上光屁股就有扰乱社会治安的嫌疑了!具体的做法应该是在服务器端做设置吧,具体没有搞过,还需要验证!
------解决方案--------------------
楼主,这里有相关双证书配置的帖子,你也可以自己google一下
http://www.javaeedev.com/blog/article.jspx?articleId=ff808081198fb524011993a9bb7a029a
另外:国内习惯叫做“数字证书”,不是“电子证书”,也有叫做“电子凭证”的,其实叫什么无所谓,方便交流为原则。
小弟目前正在学习OPENSSL,在摸索中有以下一点疑问,请大家赐教
手头一个关于用SSL 服务器端客户端通讯的例子是这么写的(网上关于OPENSSL通讯的好像都是这个例子)
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通讯呢? 我要让服务器端验证客户端的电子证书是否合法,应该怎么作?
------解决方案--------------------
帮顶一下!
------解决方案--------------------
SSL协议可以使用单证书(服务器证书),也可以是用双证书(客户端+服务器证书),两种的根本区别在于双证书中服务器对客户端的身份进行验证。具体的协议原理可以看些资料。
有关你的最后一个问题:“我要让服务器端验证客户端的电子证书是否合法,应该怎么作?”回答如下:
是否合法需要看场合,目前国家对面向公众的数字证书认证中心(CA)是有相关规定的,如果你是用在自己企业内部,应该不存在是否合法的问题。简单的例子:在自己家里光屁股合法,但是到大街上光屁股就有扰乱社会治安的嫌疑了!具体的做法应该是在服务器端做设置吧,具体没有搞过,还需要验证!
------解决方案--------------------
楼主,这里有相关双证书配置的帖子,你也可以自己google一下
http://www.javaeedev.com/blog/article.jspx?articleId=ff808081198fb524011993a9bb7a029a
另外:国内习惯叫做“数字证书”,不是“电子证书”,也有叫做“电子凭证”的,其实叫什么无所谓,方便交流为原则。