http://blog.csdn.net/as3luyuan123/article/details/16812071

用途:

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

用法:

  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命令获得。

-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命令系列

    1.1 ssl命令系列前言 openssl命令的格式是"openssl command command-options args",command部分有很多种命令,这些命令需要依赖 ...

  2. (2) OpenSSL命令

    openssl命令的格式是"openssl command command-options args",command部分有很多种命令,这些命令需要依赖于openssl命令才能执行 ...

  3. openssl命令用法

    openssl命令 配置文件:/etc/pki/tls/openssl.cnf 命令格式: openssl command [ command_opts ] [ command_args ] 众多子命 ...

  4. openssl命令行工具简介 - 指令x509

    原文链接: http://blog.csdn.net/allwtg/article/details/4982507 openssl命令行工具简介 - 指令x509 用法:           open ...

  5. 使用openssl命令剖析RSA私钥文件格式

    原文 https://blog.csdn.net/zhymax/article/details/7683925 Openssl提供了强大证书功能,生成密钥对.证书,颁发证书.生成crl.验证证书.销毁 ...

  6. openssl命令实例

    基本知识 1,证书标准 X.509 X.509 - 这是一种证书标准,主要定义了证书中应该包含哪些内容.其详情可以参考RFC5280,SSL使用的就是这种证书标准. X.509的证书文件,一般以.cr ...

  7. 用OpenSSL命令行生成证书文件

    用OpenSSL命令行生成证书文件 1.首先要生成服务器端的私钥(key文件): openssl genrsa -des3 -out server.key 1024 运行时会提示输入密码,此密码用于加 ...

  8. (转)openssl 命令: openssl req 命令详解

                                      openssl req命令主要的功能有,生成证书请求文件, 查看验证证书请求文件,还有就是生成自签名证书.本文就主要记录一下open ...

  9. OpenSSL s_server / s_client 应用实例

    netkiller openssl tls 目录[-] 12.6. s_server / s_client 12.6.1. SSL POP3 / SMTP / IMAP 12.6.2. server ...

随机推荐

  1. Ubuntu12.04更新出现 The system is running in low-graphics mode解决方法

    这两天都困在这个问题上. 感谢:http://blog.chinaunix.net/uid-26748719-id-3780062.html 原因:显卡没驱动起来 解决方法: sudo apt-get ...

  2. boost编译BUG

    linux GCC环境,boost在编译时未加-fPIC参数,导致如果有共享库使用boost静态库,会报如下错误:relocation R_X86_64_32 against `a local sym ...

  3. DMA缓冲区乒乓操作的处理

    http://www.51hei.com/bbs/dpj-141761-1.html https://blog.csdn.net/sunnydreamrain/article/details/8288 ...

  4. 2018牛客多校第九场E(动态规划,思维,取模)

    #include<bits/stdc++.h>using namespace std;const long long mod=1000000007,inv=570000004;long l ...

  5. bzoj2229: [Zjoi2011]最小割(最小割树)

    传送门 这题是用最小割树做的(不明白最小割树是什么的可以去看看这一题->这里) 有了最小割树就很简单了……点数那么少……每次跑出一个最大流就暴力搞一遍就好了 //minamoto #includ ...

  6. jquery封装多棵并列树

    起因:当前的树都是在一棵树上,应产品需求,现在需要将一级菜单并列开,然后往下铺,这样只好自己写了. demo图: 我直接封在了jquery上,此外还加了获取勾选数据的一些简单API. 思路:先把一级菜 ...

  7. [USACO09FEB]庙会班车Fair Shuttle 线段树维护maxx&&贪心

    题目描述 Although Farmer John has no problems walking around the fair to collect prizes or see the shows ...

  8. Jmeter常用线程组设置及场景运行时间计算

    Jmeter中通过线程组来模拟大用户并发场景,今天主要介绍三个常用的线程组,帮助我们设计更加完善的测试场景,另外介绍下场景执行时间如何计算. 一.Thread Group 取样器错误后要执行的动作   ...

  9. Qt学习之网络编程(一)

    一些说明 学了有一段时间的python了,小项目做了不少,最近由于项目需要,所以要回归老本行了,开始重点突击C++和qt.python的网络爬虫系列有时间就更吧. 获取本机网络信息 在网络应用中,经常 ...

  10. 才知道 Windows Live Writer Source Code plugin for SyntaxHighlighter 更新到2.0了

    这是我用 Windows Live Writer 发布的第一篇文章! 在官方网站看到 Windows Live Writer Source Code plugin for SyntaxHighligh ...