DAY18_SSL/TLS连接与TCP/IP连接

来源:互联网 发布:风险矩阵分析法 编辑:程序博客网 时间:2024/05/16 04:08

首先,我想做的是linux的两主机命令行实现DH密钥交换的隧道通信

原先想先建立TCP/IP连接,用常规的方式把信息附加上去,后来想想感觉有些不对,就找到了可以直接命令行建立SSL/TLS连接的办法:


s_server 
#生成各种服务器证书,参考CA一节; 
SSL服务程序,前提是需要生成各种证书;可测试客户端,如各浏览器https协议支持; 用法: 
>>>s_server [-accpet port][-context id] [-verify depth][-cert filename] [-debug][-msg][-www][-WWW][-HTTP][-crlf][ q Q r R P S] 其中, 
-accept arg 监听TCP端口,缺省为4433; 
-contextarg 设置ssl上下文,不设置采用默认; -cert certname 服务使用的证书文件名; -certform 证书格式; -keyform 私钥格式; -pass arg 私钥口令来源; -msg 打印协议内容; 
-timeout 设置超时; 
-key file 服务使用的私钥文件; 
-no_tmp_rsa 不生成临时RSA密钥; -verify depth 设置证书验证深度; -Verify arg 设置为1,服务端必须验证客户身份; 
-CAfile 指定CA证书文件; 
-state 打印SSL握手状态; -nbio 不采用bio; 
-quiet 不打印输出信息; 
-www 返回用户一个网页;内容为SSL握手的内容; 
-WWW -HTTP 将某文件作为网页返回客户端;URL请求为https://myhost/page.html,则把./page.html返回给client;不设置时,客户端终端输入什么,服务返回相同字符; -crlf 将用户在终端输入的换行回车转化为/r/n;  
连接命令有, 
-q 中断当前连接,但不关闭服务; -Q 中断连接,退出程序; 
-r  重新协商; 
-R  重新协商,并要求客户端证书; 
-P  在TCP直接送明文,造成客户端握手错误并断开连接; -S  打印缓存的SESSION信息; 例子: > 
s_server -state -msg -CAfile demoCA/cacert_bak.pem -key demoCA/private/cakey.pem 
举例:> s_server  -accept 4433  -msg  -state 

s_client 
SSL/TLS客户端程序,与s_server对应,可通信 用法: 
Openssl s_client [ -connect host:port][ -verify depth ][-cert filename] [pause][-debug][-ssl3][-tls1][cipher cipherlist][-rand  其中, 
-host host 设置服务地址; -port 设置端口; 
-connect host:port 设置服务地址和端口; -verify 设置证书验证深度; -cert arg 设置握手采用的证书; -certform arg 设置证书格式; -key arg 指定客户私钥名; 
-CApath 设置信任CA文件路径,ca文件名采用特殊xxx.0形式,通过x509 -hash 获得; -CAfile 指定CA文件名; 
-reconnect 重新连接,进行session重用; 
-pause 每当读写数据时,sleep 1s; -debug 调试 
-showcerts 显示证书链; -msg 打印协议信息; -state 打印SSL状态; -quiet 不显示客户端数据; -cipher 指定加密套件; 
-crlf 将用户在中断输入的换行回车转化成/r/n; 例子: 
#连接服务器200.200.145.201  
举例:> s_client -connect 200.200.145.201:4433  -state  -msg  >  s_client -showcerts 


有一篇关于SSL/TLS 与 TCP/IP 讨论讲的不错:

ssl/tls虽然被定义为运行在传输层(TCP)之上,为应用层提供一个安全的端到端的数据传输服务的网络协议中的一个层次。但是它并没有做到很好的分层设计(或者说,是没有很好的融入到已有的TCP/ip协议族中)。【原文:http://blog.sina.com.cn/s/blog_93b45b0f0101lekd.html】


0 0