二十二.     
				
				
						指令
				
				
						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.
				我甚至没有用过这个指令。