用途:

s_client为一个SSL/TLS客户端程序,与s_server对应,它不仅能与s_server进行通信,也能与任何使用ssl协议的其他服务程序进行通信。

用法:

[cpp] view plaincopy

  1. openssl s_client [-host host] [-port port] [-connect host:port] [-verify depth] [-cert filename]
  2. [-certform DER|PEM] [-key filename] [-keyform DER|PEM] [-pass arg] [-CApath directory] [-CAfile filename]
  3. [-reconnect][-pause] [-showcerts] [-debug] [-msg] [-state] [-nbio_test] [-nbio][-crlf] [-ign_eof] [-no_ign_eof]
  4. [-quiet] [-ssl2] [-ssl3] [-tls1_1] [-tls1_2] [-tls1] [-dtls1] [-no_ssl2][-no_ssl3] [-no_tls1] [-no_tls1_1]
  5. [-no_tls1_2] [-bugs] [-cipher cipherlist] [-starttls protocol] [-engine id] [-tlsextdebug] [-no_ticket]
  6. [-sess_out filename] [-sess_in filename] [-rand file(s)]

选项说明:

-host host:设置服务地址。

-port port:设置服务端口,默认为4433。

-connect host:port:设置服务器地址和端口号。如果没有设置,则默认为本地主机以及端口号4433。

-verify depth:设置证书的验证深度。记得CA也是分层次的吧?如果对方的证书的签名CA不是Root CA,那么你可以再去验证给该CA的证书签名的CA,一直到Root CA. 目前的验证操作即使这条CA链上的某一个证书验证有问题也不会影响对更深层的CA的身份的验证。所以整个CA链上的问题都可以检查出来。当然CA 的验证出问题并不会直接造成连接马上断开,好的应用程序可以让你根据验证结果决定下一步怎么走。

-cert filename:使用的证书文件。如果server不要求要证书,这个可以省略。

-certform DER|PEM:证书的格式,一般为DER和PEM。默认为PEM格式。

-key filename:使用的证书私钥文件。

-keyform DER|PEM:证书私钥文件的格式,一般为DER和PEM。默认为PEM格式。

-pass arg:私钥保护口令来源,比如:-pass file:pwd.txt,将私钥保护口令存放在一个文件中,通过此选项来指定,不需要用户来输入口令。

-CApath directory:设置信任CA文件所在路径,此路径中的ca文件名采用特殊的形式:xxx.0,其中xxx为CA证书持有者的哈希值,它通过x509 -hash命令获得。比如:openssl  x509 -hash  -in ./GlobalSignRootCA.crt

-CAfile filename:某文件,里面是所有你信任的CA的证书的内容。当你要建立client的证书链的时候也需要用到这个文件。

-reconnect:使用同样的session-id连接同一个server五次,用来测试server的session缓冲功能是否有问题。

-pause:每当读写数据时,sleep 1秒。

-showcerts:显示整条server的证书的CA的证书链。否则只显示server的证书。

-debug:打印所有的调试信息。

-msg:用16进制显示所有的协议数据。

-state:打印SSL session的状态, ssl也是一个协议,当然有状态。

-nbio_test:检查非阻塞socket的I/O运行情况。

-nbio:使用非阻塞socket。

-crlf:把在终端输入的换行回车转化成/r/n送出去。

-ign_eof:当输入文件到达文件尾的时候并不断开连接。

-no_ign_eof:当输入文件到达文件尾的时候断开连接。

-quiet:不打印出session和证书的信息。同时会打开-ign_eof这个选项。

-ssl2、-ssl3、-tls1_1、-tls1_2、-tls1、-dtls1、-no_ssl2、-no_ssl3、-no_tls1、-no_tls1_1、-no_tls1_2:使用的协议状态值。

-bugs:兼容老版本服务端的中的bug。

-cipher cipherlist:由我们自己来决定选用什么加密算法,尽管是由server来决定使用什么算法列表,但它一般都会采用我们送过去的cipher列表里的第一个cipher。

-starttls protocol:protocol可以为smtp或pop3,用于邮件安全传输。

-engine id:硬件引擎。

-tlsextdebug:打印TLS协议中服务器端接收到的额外信息值。

-no_ticket:不支持RFC4507bis会话类型。

-sess_out filename:输出SSL会话信息值到filename中。

-sess_in filename:从filename中获取SSL Session值。

-rand file(s):指定随机数种子文件,多个文件间用分隔符分开,windows用“;”,OpenVMS用“,“,其他系统用“:”。

连接选项:

如果一个确认的连接到SSL服务器,并显示了从服务器端接收到了的数据,任何操作都被发送到服务器。当交互(这意味着没有给出B<- quiet> 、B<-ign_eof>这两个选项)的时候,如果命令行B<R>,被设置则session有可能会被重 启。如果设置的是命令行B<Q>或到达了文件的结尾,连接将会被断开。

注意:

S_client可用于调试SSL服务器端。为了连接一个SSL HTTP服务器,命令如下:

openssl s_client -connect servername:443

一旦和某个SSL server建立连接之后,所有从server得到的数据都会被打印出来,所有你在终端上输入的东西也会被送给server. 这是人机交互式的。这时候 不能设置-quiet和 -ign_eof这俩个选项。如果输入的某行开头字母是R,那么在这里session会重启, 如果输入的某行开头是Q,那么连 接会被断开。你完成整个输入之后连接也会被断开。

如果连接成功,你可以用HTTP的指令,比如"GET /"什么的去获得网页了。

如果握手失败,原因可能有以下几种:

1.          server需要验证你的证书,但你没有证书。

2.          如果肯定不是原因1,那么就慢慢一个一个set以下几个选项:-bugs, -ssl2, -ssl3, -tls1,-no_ssl2,-no_ssl3, -no_dtls。

3.          这可能是因为对方的server处理SSL有bug。

有的时候,client会报错:没有证书可以使用,或者供选择的证书列表是空的。这一般是因为Server没有把给你签名的CA的名字列进它自己认 为可以信任的CA列表,你可以用检查一下server的信任CA列表。有的http server只在 client给出了一个URL之后才验证client的证书,这中情况下要设置 -prexit这个选项,并且送给server一个页 面请求。

即使使用-cert指明使用的证书,如果server不要求验证client的证书,那么该证书也不会被验证。所以不要以为在命令行里加了-cert 的参数又连接成功就代表你的证书没有问题。

如果验证server的证书有问题,就可以设置-showcerts来看看server的证书的CA链了。

自从SSLv23客户端hello不能够包含压缩方法或扩展仅仅会被支持。

BUGs:

因为该项目有很多选项,好多用的是老的技术,c代码的s_client很难去读取为什么会被关闭。一个典型的SSL客户端项目将会更加简单的。

如果服务器验证失败,B<-verify>将会退出。

B<-prexit>选项是一个很小的空间。当一个session重启后,我们必须报告。

OpenSSL s_client相关推荐

  1. openssl简介-指令s_client

    http://www.blogjava.net/ycyk168/archive/2009/11/27/303946.html openssl简介-指令s_client        用法:       ...

  2. openssl s_server s_client 相关命令参数

    openssl s_server & s_client 和相关命令参数 示例: 更新动态链接库名字列表 sudo ldconfigopenssl s_server -accept 443 -k ...

  3. 使用 OpenSSL 替代 Telnet

    Telnet 缺乏加密,这使得 OpenSSL 成为连接远程系统的更安全的选择. telnet?命令是最受欢迎的网络故障排除工具之一,从系统管理员到网络爱好者都可以使用.在网络计算的早期,telnet ...

  4. php openssl做什么,php php_openssl.dll文件有什么用?

    本篇文章是对php中php_openssl.dll的作用进行了详细的分析介绍,需要的朋友参考下 一.openssl简介数据加密是信息信息传输中的一个重要组成部分.任何信息都以明文方式传输,确实是个很不 ...

  5. 创建自己的CA机构 - openssl cert 双向认证

    为什么80%的码农都做不了架构师?>>>    1. 创建 openssl.cnf [ ca ] default_ca = subchen_ca[ subchen_ca ] cert ...

  6. 如何使用Openssl 制作CA证书

    一.SSL协议百科名片 SSL是Secure Socket Layer(安全套接层协议),可以在Internet上提供秘密性传输.Netscape公司在推出第一个Web浏览器的同时,提出了SSL协议标 ...

  7. linux openssl 反弹加密 shell

    前言 在进行红队渗透测试的后渗透阶段为了进一步横行渗透往往需要反弹 shell,这里列出了使用各种语言进行反弹 shell 的方法,我发现这种反弹 shell 方式都有一个缺点,那就是所有的流量都是明 ...

  8. 使用 openssl反弹加密 shell

    目录 前言 OpenSSL 简介 使用 OpenSSL 生成证书自签名证书 使用 OpenSSL 反弹加密 shell Linux Windows 使用 OpenSSL 搭建简易 HTTPS Serv ...

  9. 用openssl跟Gmail的smtp对话(一)

    一.目的 Gmail的webmail虽然常常报系统遇到错误,用起来不太爽,但是smtp/pop3还是蛮厚道的. 服务稳定,被GFW拦截的概率也小一些,可能是采用SSL加密通讯的缘故吧.所以研究一下gm ...

最新文章

  1. 关于Map的key值的问题
  2. python类方法以及类调用实例方法的理解
  3. python36中文手册_python_36_文件操作4
  4. e影安全智能浏览器_【启耀玻璃】智能调光玻璃有什么特点? - 调光艺术玻璃|防火防弹玻璃|LOW-E节能玻璃|隔音隔热玻璃|特种安全玻璃|夹层中空玻璃-...
  5. MySQL字符串类型
  6. oracle rman optimization,ORACLE rman设置
  7. 输出直角三角形 java
  8. C++ 深拷贝和浅拷贝
  9. 使用N4BiasFieldCorrection处理MRI图像
  10. Android通过Wifi来调试你的应用
  11. 【Linux系统编程】| 【01】系统编程基本概念
  12. Servlet概述及其原理
  13. 为什么使用多线程,多线程如何提高效率
  14. 启动tim时为我自动登录不能勾选(为灰色)
  15. 2021毕业年的最后一躺
  16. ZZULIOJ1086-1090Python解法
  17. 爱数之Oracle备份与恢复
  18. shardingJdbc专题系列(一)之shardingJdbc简介
  19. 使用Python+OpenCV进行图像处理(三)| 视觉入门
  20. 推荐一款好用的DVD 电影(DVD Video)光盘备份软件

热门文章

  1. matlab图像处理ppt,数字图像处理(MATLAB版).ppt
  2. Kotlin学习笔记-1
  3. 软件史上比较严重的bug案例
  4. flv视频使用,和部分url不能播放的问题解决
  5. 计算机无法转换文件,电脑中excel转换器无法打开文件的解决方法
  6. 记录一个srcML和javalang等工具做tokenization不一致的地方
  7. Chapter9.4:状态反馈与极点配置
  8. 【版本管理】软件项目版本号的命名规则及格式
  9. IP、域名和端口号之间的联系
  10. 谷歌天气预报 API