我利用OPENSSL库自己用SOCKET写了一个程序,连接到远端的一个HTTPS服务
(端口443)。连接时正确,也收到了SERVER端发过来的证书等。可是我不知怎么发我的公钥或者怎么让SERVER验证我是一个合法用户。我只是连接后发送“username\r\npassword\r\n"过去。
结果收到的信息如下:Got 471 chars:'<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML><HEAD>
<TITLE>401 Authorization Required</TITLE>
</HEAD><BODY>
<H1>Authorization Required</H1>
This server could not verify that you
are authorized to access the document
requested.  Either you supplied the wrong
credentials (e.g., bad password), or your
browser doesn't understand how to supply
the credentials required.<P>
<HR>
<ADDRESS>Apache/1.3.14 Server at 3dns.viewtoo.com Port 443</ADDRESS>
</BODY></HTML>它说我没有经过验证授权访问,可我不知道怎么让SERVER验证我,是不是还要发我的公钥和一个数字证书过去??谁做过这个方面的东西,望赐教!

解决方案 »

  1.   

    我原来做的那个东西后来是用IE进行认证的,具体报文我没有仔细分析,但肯定是加过密的。发送“username\r\npassword\r\n"显然是不行的,SSL库有个验证的例子。
      

  2.   

    我原来做的那个东西后来是用IE进行认证的,具体报文我没有仔细分析,但肯定是加过密的。发送“username\r\npassword\r\n"显然是不行的,SSL库有个验证的例子。
      

  3.   

    我原来做的那个东西后来是用IE进行认证的,具体报文我没有仔细分析,但肯定是加过密的。发送“username\r\npassword\r\n"显然是不行的,SSL库有个验证的例子。
      

  4.   

    kingzai() :
    SSL库那个验证的例子在哪个目录下?叫什么名字?我怎么找不到啊?
      

  5.   

    kingzai() :
    SSL库那个验证的例子在哪个目录下?叫什么名字?我怎么找不到啊?
      

  6.   

    SSL缺省是验证服务器的真实性,验证客户端的真实性是个可选项。现在看来服务器把自己的证书发给你,让你验证它是不是真实的服务器。服务器的证书是如何得到的?是自己签发的吗,还是从其它证书管理机构申请的?如果是自己签发的,一般你有根证书和它的公钥,把它存放在本地目录中,当收到服务器证书后,调用OpenSSL的身份验证函数验证服务器证书,参数包括根证书内容和公钥。在身份验证通过后,调用OpenSSL会话随机生成一个密码,这是一个对称密码,SSL用这个密码加密所有的报文。你得到了这个密码了吗,如果得到了,调用OpenSSL的加密函数,把密码和报文作为参数。
      

  7.   


    https看作通过SSL承载的HTTP协议。当你建立好SSL连接后,就可以通过该连接发送HTTP请求了。你试试发送"GET / HTTP/1.0\r\n\r\n"
      

  8.   

    chenkan2000(侃侃):
    SSL一般好象只需验证服务器,客户端验证是可选项,但现在可能因为服务器要求,还需要验证我这个客户端。
    我现在不知道怎么发送我的证书或公钥等信息给他(SERVER)去验证。所以服务器发回来的消息就说我不是得到验证的有访问权限的用户。
    你能告诉我怎么做吗?不知你有没有这方面的例子?
      

  9.   

    Kevin_qing() :我连接后,发送"GET / HTTP/1.0\r\n\r\n"过去后收到的信息为:Got 727 chars:'HTTP/1.1 401 Authorization Required
    Date: Fri, 28 Jun 2002 17:33:11 GMT
    Server: Apache/1.3.14 (Unix) mod_fastcgi/2.2.10 mod_ssl/2.7.1 OpenSSL/0.9.6
    WWW-Authenticate: Basic realm="3-DNS"
    Connection: close
    Content-Type: text/html; charset=iso-8859-1<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
    <HTML><HEAD>
    <TITLE>401 Authorization Required</TITLE>
    </HEAD><BODY>
    <H1>Authorization Required</H1>
    This server could not verify that you
    are authorized to access the document
    requested.  Either you supplied the wrong
    credentials (e.g., bad password), or your
    browser doesn't understand how to supply
    the credentials required.<P>
    <HR>
    <ADDRESS>Apache/1.3.14 Server at 3dns.viewtoo.com Port 443</ADDRESS>
    </BODY></HTML>可能还是没有验证通过,
    能告诉我怎么去验证客户端吗?
      

  10.   


    因为访问这个HTTPS需要用户名和密码,那么我该什么时候以什么格式将我的用户名和密码发过去啊??
      

  11.   

    那是你的web验证没有通过,不是ssl的问题你的这个server使用的是basic验证
    将你的用户名和密码组合成
    "user:pass"
    的格式,然后进行base64编码
    发送的GET请求加上验证头Authorization: Basic base64编码后的字符串实际请求就成为
    "GET / HTTP/1.0\r\n"
    "Authorization: Basic xxx\r\n"//这里的xxx是用户名和密码编码后的字符串
    "\r\n"