OpenSSL命令---s_server

用途:

s_serveropenssl提供的一个SSL服务程序。使用此程序前,需要生成各种证书。本命令可以用来测试ssl客户端,比如各种浏览器的https协议支持。

用法:

openssl s_server [-accept port] [-context id] [-verify depth] [-Verify depth] [-crl_check] [-crl_check_all] 
[-cert filename] [-certform DER|PEM] [-key filename] [-keyform DER|PEM] [-pass arg] [-dcert filename] 
[-dcertform DER|PEM ] [-dkey keyfile] [-dkeyform DER|PEM ] [-dpass arg] [-dhparam filename] 
[-name_curve arg][-nbio] [-nbio_test] [-crlf] [-debug] [-msg] [-state] [-CApath directory] [-CAfile filename] 
[-nocert] [-cipher cipherlist] [-quiet] [-no_tmp_rsa] [-ssl2] [-ssl3] [-tls1_1] [-tls1_2] [-tls1] [-dtls1] 
[-timeout] [-mtu] [-chain] [-no_ssl2][-no_ssl3] [-no_tls1] [-no_tls1_1] [-no_tls1_2] [-no_dhe] [-no_ecdhe]
[-bugs] [-hack] [-www] [-WWW] [-HTTP][-engine id] [-tlsextdebug] [-no_ticket] [-id_prefix arg] [-rand file(s)]


选项说明:

-accept port:监听的TCP端口。缺省为4433

-context id:设置SSL contextid, 可以设置为任何值。SSL context是会话ID的上下文。也可以不设置这个选项,,有缺省的给你用的。

-verify depth-Verify depth:意义和s_client的这个选项一样,但同时表示必须验证client的证书。不记得serverclient的证书验证是可以选的吗?-verify表示向client要求证书,但client还是可以选择不发送证书,-Verify表示一定要client的证书验证,否则握手失败。

-crl_check-crl_check_all:检查客户端的证书是否在CA的废除列表中。CRLs)在证书文件中。crl_check_all表示要检查所有的CA证书中的废除列表。

-cert filename:使用的证书文件名。大多数服务器算法套件需要一个证书,还有一些需要证书的公钥类型,例如DSS算法组件需要证书(包含一个DSSDSA)密钥)。缺省使用 ./server.pem

-certform DER|PEM:证书的格式,一般为DERPEM。缺省为PEM

-key filename:使用的私有密钥文件。如果没有指定,那么证书文件会被使用(使用的是证书公钥值)。

-keyform DER|PEM:私有密钥文件的格式,一般为DERPEM。缺省为PEM

-pass arg:私钥保护口令来源。

-dcert filename-dkey keyfile:指定一个附加的证书文件和私有密钥文件。不同的cipher需要不同的证书和私有密钥文件。这个不同的cipher主要指cipher里面的不对称加密算法不同。比如基于RSAcipher需要的是RSA的私有密钥文件和证书,而基于DSA的算法则需要的是DSA的私有密钥文件和证书。这个option可以让这样我们的server同时支持俩种算法的cipher成为可能。

-dcertform DER|PEM:附加证书的格式,一般为DERPEM。缺省为PEM

-dkeyform DER|PEM:附加的私有密钥文件的格式,一般为DERPEM。缺省为PEM

-dpass arg:附加私钥保护口令来源。

-dhparam filename:使用的DH参数文件名。如果没有设置,那么server会试图去从证书文件里面获得这些参数。如果证书里面没有这么参数,一些hard code的参数就被调用。

-name_curve arg:椭圆曲线算法的选择类型。

-nbio_test:检查非阻塞socketI/O运行情况。

-nbio:使用非阻塞socket

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

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

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

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

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

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

-nocert:如果server不想使用任何证书,就设置这个选项。目前只有anonymous DH算法有需要这么做。

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

-quiet:禁止打印sessionhe 和证书信息值。

-no_tmp_rsa:现在的接口cipher有时会使用临时RSA密钥。那就是说每次对话的时候临时生成密钥对。本选项就是用来禁止这种情况的。

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

-no_dhe:如果这个选项被设置,则没有DH参数提供,即不能够使用关于DH相关的ciphers

-no_ecdhe:能够使用关于ECDH相关的ciphers

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

-hack:这个选项对更早的Netscape SSL代码提供一个可行的解决方案。

-www:当client连接上来的时候,发回一个网页,内容就是SSL握手的一些内容。

-HTTP-WWW:用来把具体某个文件当网页发回给client的请求。比如clientURL请求是 https://myhost/page.html ,就把 ./page.html发回给client-engine id:硬件引擎。

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

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

-id_prefix arg:根据arg的值来产生SSL/TLS中的session IDs的前缀。当有多个服务器的时候,大多数用于测试SSL/TLS代码。

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

连接的命令:

没有设置 –www -WWW这俩个选项,当一个ssl client连接上来的话它所发过来的任何东西都会显示出来,你在终端输入的任何东西都会发回给client。你可以通过在终端输入的行的第一个字母控制一些行为。

q

    中断当前连接,但不关闭server.

Q

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

r

    进行renegotiate行为。

R

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

P

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

S

    打印出session-cache的状态信息。session-cache在编程章节会详细介绍。

注意:

B可以用于调试SSL客户端。为了从一个web浏览器接受连接,命令如下:

openssl s_server -accept 443 -www

可以这样使用。

大多数的webNetscape MSIE除外)仅仅支持RSA算法套件。因此当使用非RSA格式的证书时,他们不能够连接服务器。

即使指定一个空的CA列表,当请求一个客户端证书时敬爱那个严重的违反协议标准,一些SSL客户端解释说任何CA都可以接受。这个对调试证书用途非常有效。

可以使用B命令来打印出使用的session参数。

BUGs

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

普通的算法输出是个错误:它仅仅给出了OpenSSL确认的客户端支持的算法套件列表。

这是一个方法:打印客户端支持的不知名的算法套件的详细信息值。

你可能感兴趣的:(OpenSSL命令)