解决问题中 keyword: goahead ssl arm

我已将openssl移植到arm板中,webserver使用的是GoAhead webserver, 
webserver运行成功加载证书及key文件,IE可以下载证书,但是打不开web页面。 
用openssl测试打印信息如下: 
F:/Software/OpenSSL>openssl s_client -connect 138.1.60.1:443 -state 
Loading 'screen' into random state - done 
CONNECTED(00000790) 
SSL_connect:before/connect initialization 
SSL_connect:SSLv2/v3 write client hello A 
SSL_connect:SSLv3 read server hello A 
depth=1 /O=gaoke/OU=ngn/L=Guangzhou/ST=Guangzhou/C=CN/CN=138.1.60.1 
verify error:num=19:self signed certificate in certificate chain 
verify return:0 
SSL_connect:SSLv3 read server certificate A 
SSL_connect:SSLv3 read server done A 
SSL_connect:SSLv3 write client key exchange A 
SSL_connect:SSLv3 write change cipher spec A 
SSL_connect:SSLv3 write finished A 
SSL_connect:SSLv3 flush data 
SSL_connect:SSLv3 read finished A 
--- 
Certificate chain 
0 s:/C=CN/ST=Guangzhou/O=gaoke/OU=ngn/CN=138.1.60.1 
i:/O=gaoke/OU=ngn/L=Guangzhou/ST=Guangzhou/C=CN/CN=138.1.60.1 
1 s:/O=gaoke/OU=ngn/L=Guangzhou/ST=Guangzhou/C=CN/CN=138.1.60.1 
i:/O=gaoke/OU=ngn/L=Guangzhou/ST=Guangzhou/C=CN/CN=138.1.60.1 
--- 
Server certificate 
-----BEGIN CERTIFICATE----- 
MIICKzCCAZQCAQEwDQYJKoZIhvcNAQEEBQAwaDEOMAwGA1UEChMFZ2Fva2UxDDAK 
BgNVBAsTA25nbjESMBAGA1UEBxMJR3Vhbmd6aG91MRIwEAYDVQQIEwlHdWFuZ3po 
b3UxCzAJBgNVBAYTAkNOMRMwEQYDVQQDEwoxMzguMS42MC4xMB4XDTA5MDUxOTEx 
NTY1OVoXDTEwMDUxOTExNTY1OVowVDELMAkGA1UEBhMCQ04xEjAQBgNVBAgTCUd1 
YW5nemhvdTEOMAwGA1UEChMFZ2Fva2UxDDAKBgNVBAsTA25nbjETMBEGA1UEAxMK 
MTM4LjEuNjAuMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAqeuw3LL6F4bP 
yjmhMr1+rE2y90BDazy6OH9PsIw2A4+gQCZqysKEThcam8Av5lh127XOZ8J3G+4r 
87GJvvtx8nj7bxMWPO/Ushq0d18astkMX4TJsbTfMGbjVOxWSzN2QzBlKALJZ/HG 
tKVaFfqlKK+FjpLZSDiPqrCa4+dgEBsCAwEAATANBgkqhkiG9w0BAQQFAAOBgQB/ 
zEHb35By1Ay3betK+KjR+aTPFhiLtjDO01Z9AcoVs1NVm63a+5/MwPMzcc19ka1e 
fOMuFK/pcCLxZyCBfPiPPWLJPIEa1KfZZXRBqlclTgMzlq3sWBbjUzaOqB6fasiZ 
/liQiSO1VXlGCGJYD1tnK/EmHUfeFMYY1X1AMr5sIw== 
-----END CERTIFICATE----- 
subject=/C=CN/ST=Guangzhou/O=gaoke/OU=ngn/CN=138.1.60.1 
issuer=/O=gaoke/OU=ngn/L=Guangzhou/ST=Guangzhou/C=CN/CN=138.1.60.1 
--- 
No client certificate CA names sent 
--- 
SSL handshake has read 1308 bytes and written 346 bytes 
--- 
New, TLSv1/SSLv3, Cipher is AES256-SHA 
Server public key is 1024 bit 
Compression: NONE 
Expansion: NONE 
SSL-Session: 
Protocol : TLSv1 
Cipher : AES256-SHA 
Session-ID: BF5B99A9AF7AB6DD937420EC3E80DF05BB10406EB9672CBE469857DD8EED0F10 

Session-ID-ctx: 
Master-Key: 911C2E439041ED5C8F9DC88BDF54A64B3EA56711D20C6CBA56E00DF654B1682A 
B672D26FEBF43B0E56F5E1D40917F7F6 
Key-Arg : None 
Start Time: 1242738033 
Timeout : 300 (sec) 
Verify return code: 19 (self signed certificate in certificate chain) 
--- 
然后停在这里不动了。 
请各位大侠帮忙分析一下原因,是哪方面出了问题? 

 

================Additional===================

附上:

openssl简介-指令s_server
用法: 

openssl s_server [-accept port] [-context id] [-verify depth] 

[-Verify depth] [-cert filename] [-key keyfile] [-dcert filename] 

[-dkey keyfile] [-dhparam filename] [-nbio] [-nbio_test] [-crlf] 

[-debug] [-state] [-CApath directory] [-CAfile filename] [-nocert] 

[-cipher cipherlist] [-quiet] [-no_tmp_rsa] [-ssl2] [-ssl3] [-tls1] 

[-no_ssl2] [-no_ssl3] [-no_tls1] [-no_dhe] [-bugs] [-hack] [-www] 

[-WWW] [-engine id] 



说明: 
和s_client是反义词, 模拟一个实现了SSL的server. 



OPTIONS 
-accept port 
监听的TCP端口。缺省为4433. 
-context id 
设置SSL context的id, 可以设置为任何值。SSL context是什么?编程的章节会详细介绍的。你也可以不set这个option, 有缺省的给你用的。 
-cert certname 
使用的证书文件名。缺省使用 ./server.pem 
-key keyfile 
使用的私有密钥文件。如果没有指定,那么证书文件会被使用。???? 
The private key to use. If not specified then the certificate 
file will be used. 
-dcert filename, -dkey keyname 
指定一个附加的证书文件和私有密钥文件。不同的cipher需要不同的证书和 私有密钥文件。这个不同的cipher主要指cipher里面的不对称加密算法不同   比如基于RSA的cipher需要的是RSA的私有密钥文件和证 书,而基于DSA的算法   则需要的是DSA的私有密钥文件和证书.这个option可以让这样我们的server同时支持俩种算法的cipher成为可 能。 
-nocert 
如果server不想使用任何证书,set这个option. 
目前只有anonymous DH算法有需要这么做。 
-dhparam filename 
使用的DH参数文件名。如果没有set, 那么server会试图去从证书文件里面获得这些参数。如果证书里面没有这么参数,一些hard code的参数就被调用。 
-nodhe 
禁止使用基于EDH的cipher. 
-no_tmp_rsa 
现在的出口cipher有时会使用临时RSA密钥。那就是说每次对话的时候临时生成密钥对。本optio就是用来禁止这种情况的。 
-verify depth, -Verify depth 
意义和s_client的这个option一样,但同时表示必须验证client的证书。不记得server对client的证书验证是可以选的 吗?-verify表示向client要求证书,但client还是可以选择不发送证书,-Verify表示一定要client的证书验证,否则握手告 吹。 
-CApath directory 
-CAfile file 
-state 
-debug 
-nbio_test 
-nbio 
-crlf 
-quiet 
-ssl2, -ssl3, -tls1, -no_ssl2, -no_ssl3, -no_tls1 
-bugs 
-cipher cipherlist 
这些option于s_client的同名option意义相同。 
下面俩个指令模拟一个简单的http server. 
-www 
当client连接上来的时候,发回一个网页,内容就是SSL握手的一些内容。 
-WWW 
用来把具体某个文件当网页发回给client的请求。比如client的URL请求是 https://myhost/page.html ,就把 ./page.html发回给client.如果没有set -www, -WWW这俩个option, 当一个ssl client连接上来的话它所发过来的任何东西都会显示出来,你在终端输入的任何东西都会发回 给client.你可以通过在终端输入的行的第一个字母控制一些行为 
q: 
中断当前连接,但不关闭server. 

中断当前连接,退出程序。 

进行renegotiate行为。 

进行renegotiate行为, 并且要求client的证书 。 

在TCP层直接送一些明文。这会使client认为我们没有按协议的游戏规则进行通信而断开连接。 

打印出session-cache的状态信息。session-cache在编程章节会详细介绍。 
NOTES 
用于调试ssl client. 
下一条指令用来模拟一个小的http server, 监听443端口。 
openssl s_server -accept 443 -www 
session的参数可以用sess_id指令打印。 
我对这条指令实在没有兴趣,一般使用openssl都是用做server, 没有机会调试client.我甚至没有用过这个指令。

你可能感兴趣的:(C/C++)