转载自:
旧版本SSL/TLS将被弃用,如何应对?
旧版本SSL/TLS将被弃用,如何应对?
前言:
很长时间,公司都是使用authorize.net在线支付方案,最近收到通知,说'TLS Disablement Date Extended',明年2018年将会不支持旧版本TLS v1.1 v1.0和更旧的SSL。Sorry,什么东东?
本文适用环境:Linux VPS,PHP 5,Apache、Mysql、HTTPS证书
解决思路:
1)学习什么是SSL/TLS?有什么版本?
2)和自己的Linux服务器有什么关系?Apache?PHP?HTTPS?SSL证书?
3)1.0~1.1被弃用,那我们在用的版本是多少?
4)如果使用的TLS版本刚好被弃用,怎么升级?
解决步骤:
(超精简,文章后面有详细的介绍与链接)
1)学习什么是SSL/TLS?有什么版本?
HTTP是不加密的明文web传输协议,危险;
SSL协议是HTTP的补充,使用加密等方法让HTTP更安全,版本为1、2、3;
TLS是基于SSL v3的升级版协议,目前版本发展为v1.0 v1.1 v1.2;
HTTPS协议=HTTP+SSL/TLS,简单来说;
TLS=SSL升级版
2)和自己的Linux服务器有什么关系?Apache?PHP?HTTPS?SSL证书?
不同版本Linux支持的SSL、TLS不一样,
Apache HTTP 服务器模块 mod_ssl 提供了与 OpenSSL 的接口;
PHP借助apache能使用SSL、TLS,特别是cURL时;
SSL证书是CA机构核发的,是apache服务器为某域名启用HTTPS连接的凭证,浏览器会检查对应的SSL证书;
总结就是,SSL/TLS是HTTPS连接的基础,
如果你网站没https,那就不要紧了。
3)1.0~1.1被弃用,那我们在用的版本是多少?
查看系统支持的SSL/TLS版本:
openssl ciphers -v | awk '{print $2}' | sort | uniq
查看网站被访问时使用的SSL/TLS版本:
使用Chrome浏览器,打开你的https网站任意页面,在空白处右键,检查,在弹窗顶端找到'Security'选项卡,打开,找到右边'Secure Connection'的介绍,寻找例如'(TLS 1.2)'等字眼,即可。有时是TLS 1.2,TLS 1.1,SSL 3等等。
查看网站主动访问其他服务器时所用的SSL/TLS版本:
在https网站下新建一个php文件,输入以下内容,运行即可看到版本:<?php $ch = curl_init('https://www.howsmyssl.com/a/check');curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);$data = curl_exec($ch);curl_close($ch); $json = json_decode($data);echo $json->tls_version;echo '<br><br>';echo $data;die;
怎么判断我们是否解决了问题:
系统支持新的TLS版本,而且,我们网站对外正在使用这新版,还有就是网站主动访问其他服务器时用的TLS版本是不会被弃用的,
那就没问题~
4)如果使用的TLS版本刚好被弃用,怎么升级?
升级服务器OS,
实在不可以升级的话,请自行搜索 如何升级。
(我的服务器已经支持TLS v1.2,不用升,所以这环节没有测试没有实践,不敢打包票)
----------- 搞定! ----------
延伸学习:
有什么命令能明确知道某版本的SSL或者TLS真的能用?
openssl s_client -connect zhihu.com:443 -tls1
openssl s_client -connect zhihu.com:443 -tls1_1
openssl s_client -connect zhihu.com:443 -tls1_2
openssl s_client -connect zhihu.com:443 -ssl1
openssl s_client -connect zhihu.com:443 -ssl2
openssl s_client -connect zhihu.com:443 -ssl3
以上,能连接'Connected...'的就是能用,报错的说未知命令的就是不能用。
研究HTTPS
http://blog.csdn.net/wm_1991/article/details/51954571
1994年,NetScape公司设计了SSL协议(Secure Sockets Layer)的1.0版,但是未发布。
1995年,NetScape公司发布SSL 2.0版,很快发现有严重漏洞。
1996年,SSL 3.0版问世,得到大规模应用。
1999年,互联网标准化组织ISOC接替NetScape公司,发布了SSL的升级版TLS 1.0版。
2006年和2008年,TLS进行了两次升级,分别为TLS 1.1版和TLS 1.2版。最新的变动是2011年TLS 1.2的修订版。
目前,应用最广泛的是TLS 1.0,接下来是SSL 3.0。但是,主流浏览器都已经实现了TLS 1.2的支持。
TLS 1.0通常被标示为SSL 3.1,TLS 1.1为SSL 3.2,TLS 1.2为SSL 3.3。
我这次收到的通知邮件,旧版本SSL/TLS还勉强能再用到2018年头:
From: Authorize.Netno-reply@mail.authorize.net
Date: Wed, Aug 2, 2017 at 3:48 PM
Subject: TLS Disablement Date Extended
TLS Disablement Date Extended
Dear Authorize.NetDeveloper:
...
updating your payment systems to disable TLS 1.0 and 1.1, Authorize.Nethas decided to extend our deadline from September 18, 2017. The new date for when we will no longer allow TLS 1.0 and 1.1 is February 28, 2018.
...
他们官网的说明:
Authorize.Net Support for SSL/TLS FAQ
https://support.authorize.net/authkb/index?page=content&id=A1623&actp=search&viewlocale=en_US&searchid=1496161288143
PCI安全协会的全球通告:
INFORMATION SUPPLEMENT: Migrating from SSL and Early TLS
https://www.pcisecuritystandards.org/documents/Migrating_from_SSL_Early_TLS_Information%20Supplement_v1.pdf
HTTP,SSL/TLS和HTTPS协议的区别与联系
https://zhidao.baidu.com/question/1434192761402030819.html
SSL与TLS的区别以及介绍
http://kb.cnblogs.com/page/197396/
SSL证书产品简介
https://www.wosign.com/products/ssl.htm
如何知道服务器所支持的所有SSL/TLS版本?
How to find out the supported SSL/TLS versions for specific OpenSSL built
https://stackoverflow.com/questions/27430158/
openssl ciphers -v | awk '{print $2}' | sort | uniq
如何判断浏览器是否正在使用SSL/TLS连接?
How to determine if a browser is using an SSL or TLS connection?
https://security.stackexchange.com/questions/19096/how-to-determine-if-a-browser-is-using-an-ssl-or-tls-connection/91948#91948
(接上)一个简单好用的检测SSL/TLS版本的免费API,PHP的cURL可用
https://www.howsmyssl.com/s/api.html
如何知道服务器所支持的所有SSL/TLS版本?(2)
How Can I Determine What SSL/TLS Versions Are Available for HTTPS Communication?
http://thenubbyadmin.com/2014/02/17/how-can-i-determine-what-ssltls-versions-are-available-for-https-communication/
apache https配置步骤
http://www.cnblogs.com/best-jobs/p/3298258.html
curl_setopt官方解释
http://php.net/manual/en/function.curl-setopt.php
curl 选项属性配置说明
http://blog.csdn.net/hjq198988/article/details/46239051
php - Verify if curl is using TLS - Stack Overflow
https://stackoverflow.com/questions/27904854/verify-if-curl-is-using-tls
<?php $ch = curl_init('https://www.howsmyssl.com/a/check');curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);$data = curl_exec($ch);curl_close($ch); $json = json_decode($data);echo $json->tls_version;echo '<br><br>';echo $data;die;