二十二.
指令
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.
Q
中断当前连接,退出程序。
r
进行
renegotiate
行为。
R
进行
renegotiate
行为
,
并且要求
client
的证书
。
P
在
TCP
层直接送一些明文。这会使
client
认为我们没有按协议的游戏规则进行通信而断开连接。
S
打印出
session-cache
的状态信息。
session-cache
在编程章节会详细介绍。
NOTES
用于调试
ssl client.
下一条指令用来模拟一个小的
http server,
监听
443
端口。
openssl s_server -accept 443 -www
session
的参数可以用
sess_id
指令打印。
我对这条指令实在没有兴趣,一般使用
openssl
都是用做
server,
没有机会调试
client.
我甚至没有用过这个指令。