最近使用OpenSSL的库去访问HTTPS的报文,在外网环境能够很好的工作,OpenSSL的封装将通信前的Handshake,cipher suites exchange , 传输过程的加密、解密都做好了,用起来也非常简单 ,
但是在内网环境通过代理服务器访问时出现问题了,抓包过程发现,内网环境是在与代理服务器交换数据。
在开始传输数据之前会先用HTTP协议的CONNECT 动词建立连接,继而进行后续的握手与数据交换。
但是不知道怎么在OpenSSL中进行设置,让访问正常进行,各位有类似情况的怎么处理?
3.1 选项: -servername ${host}
SNI(Server Name Indication)定义在RFC 4366,是一项用于改善SSL/TLS的技术,在SSLv3/TLSv1中被启用。它允许客户端在发起SSL握手阶段(具体说来,是客户端发出SSL请求中的ClientHello阶段),就提交请求的Host信息,使得服务器能够切换到正确的域并返回相应的证书。若服务端开启了SNI,客户端不指定ServerName则会报错。
3.2 选项: -outform pem
#证书格式说明
PEM (Privacy Enhanced Mail):内容经过BASE64编码,首行以"-----BEGIN"开头,尾行以 "-----END"开头。
DER (Distinguished Encoding Rules):二进制格式,不可读。
#证书格式转化
openssl x509 -in cert.crt -inform der -outform pem -out cert.pem
openssl x509 -in cert.pem -inform pem -outform der -out cert.crt
3.3 命令: echo "Q"
openssl建立连接后,输入字符Q断开连接