openssl 常用命令:

openssl s_client -connect localhost:8211
openssl s_client –help

a) One shell script to test openssl supporting which protocol version

#!/bin/ksh
##test your port support which ssl/tls protocol
Target="localhost:$1"
for Version in "SSLv2 -ssl2" "SSLv3 -ssl3" "TLS 1.0 -tls1" "TLS 1.1 -tls1_1" "TLS 1.2 -tls1_2"
do
  openssl s_client -connect $Target $(echo $Version | grep -oP '\-[^$]+$') <<< "" > /dev/null 2>&1
  if [ $? != 0 ]
  then
    echo "$(echo $Version | grep -oP '^[^\-]+')NOT supported on $Target or unreachable"
  else
    echo "$(echo $Version | grep -oP '^[^\-]+')IS supported on $Target"
  fi
  sleep 1
done

b)  s_client and s_server

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

 

2 How to enable sslv2 and sslv3 in openssl higher version

Download openssl in site https://ftp.openssl.org/source/old/1.0.2/
wget https://openssl.org/source/openssl-1.0.2k.tar.gz
tar -xvf openssl-1.0.2k.tar.gz
cd openssl-1.0.2k/
# --prefix will make sure that make install copies the files locally instead of system-wide
# --openssldir will make sure that the binary will look in the regular system location for openssl.cnf
# no-shared builds a mostly static binary
./config --prefix=`pwd`/local --openssldir=/usr/lib/ssl enable-ssl2 enable-ssl3 no-shared
make depend
make
make -i install
sudo cp local/bin/openssl /usr/local/bin/

Openssl trouble shooting

 

连接选项:

 

如果一个确认的连接到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重启后,我们必须报告。