升级openssl 支持TLS1.2

摘要:
openssl现有版本不支持。git底层使用curl库,curl库又调用的libopenssl库。如果希望git支持tls1.2,需要更新curl和openssl这两个库。版本号7.34.0以上支持tlsv1.0、tlsv1.1、tlsv1.2协议。curl支持的协议版本,都得让调用的openssl先支持协议版本,否则curl不支持。导致libcurl.so与pycurl.so接口不一致。当这个问题变得更加明显时OpenSSL特别使用RSA_sign/RSA_verify进行某些RSA签名在1.0.0及更高版本中经过EVP_PKEY_METHOD的那些。可使用no-npn标志禁用配置或配置。
升级openssl 支持TLS1.2

支持TLS1.2

背景:

现在许多网站,都要求tls1.2协议以上,像github、 pip3安装包网站https://pip.pypa.io/等。

openssl现有版本不支持。需要升级openssl。

git 底层使用curl库,curl库又调用的libopenssl库。

如果希望git支持tls1.2,需要更新curl和openssl这两个库。

curl默认支持sslv2、 sslv3、 tlsv1、协议。

版本号7.34.0以上支持tlsv1.0、 tlsv1.1、 tlsv1.2协议。

版本好7.52.0支持tlsv1.3协议。

以上版本信息可以在git源码或者curl源码中看到。

curl支持的协议版本,都得让调用的openssl先支持协议版本,否则curl不支持。

1. 升级openssl

1.现有版本说明

现在版本openssl 1.0.0e,不支持tls1.2。

[root@banel64 gvmd-8]# openssl

OpenSSL> version

OpenSSL 1.0.0e-fips 6 Sep 2011

OpenSSL>

查看官网说明,从1.0.1版本开始支持TLS1.1及TLS1.2

来自官网说明:

https://www.openssl.org/news/changelog.html

附录为从官网拷贝下来的changlog.

2.下载

wget https://www.openssl.org/source/old/1.0.1/openssl-1.0.1j.tar.gz //之前装的,为了跟ubuntu匹配,装了下面的版本

wget https://www.openssl.org/source/old/1.1.0/openssl-1.1.0g.tar.gz

3.安装命令:

./config --prefix=/usr/ #不用安装静态库

系统自动检测是64位系统,将lib库安装在/usr/lib64下

make

make install

4.查看版本

openssl version

2.更新curl

下载curl-7.50.3.tar.gz

./configure --prefix=/usr --libdir=/usr/lib64

make

make install

curl --help 查看一下支持tls1.2不

3.更新python3.7.4

python3 -c "import ssl; print(ssl.OPENSSL_VERSION)"

查看python3引用的ssl哪个版本

下载https://www.python.org/ftp/python/3.7.4/Python-3.7.4.tgz

安装命令:

./configure --prefix=/usr/ --libdir=/usr/lib64 --enable-shared

make

make install

因为安装到/usr/lib64/下,好多modules找不到,需要建个软连接。

建个软连接ln -s /usr/lib64/python3.7/lib-dynload/ /usr/lib/python3.7/lib-dynload

4.更新pip3

默认装的19.0.3

升级openssl 支持TLS1.2第1张

pip3 install 包名

给出一个警告,即使不更新,也可以用。推荐更新。

You are using pip version 19.0.3, however version 19.2.3 is available.

You should consider upgrading via the 'pip install --upgrade pip' command.

执行pip3 install --upgrade pip升级pip

5.更新git

下载git-2.23.0.tar.gz

make prefix=/usr all

make prefix=/usr install

6.为了让yum运行

因为curl更新了,libcurl.so库变成新的库,但是pycurl.so库还是旧的。

导致libcurl.so 与 pycurl.so接口不一致。yum不能运行。

需要重新安装pycurl.so库。

如果用python 安装,安装到python2.7/site-package/xxxxx下。

如果用python3 安装,安装到python3.7/site-package/xxxxx下。

升级openssl 支持TLS1.2第2张

下载pycurl-7.21.5.tar.gz
python setup.py install --curl-config=/usr/bin/curl-config
注意--curl-config参数是curl 库安装产生的curl-config文件路径。

附录:

1.0.0h1.0.1之间的变化[2012314]

*)添加与使用ASN1 OCTET的旧MDC2签名的兼容性

STRING表单而不是DigestInfo。

[史蒂夫汉森]

*)用于MDC2 RSA签名的格式在EVP之间不一致

和RSA_sign / RSA_verify函数。当这个问题变得更加明显时

OpenSSL特别使用RSA_sign / RSA_verify进行某些RSA签名

在1.0.0及更高版本中经过EVP_PKEY_METHOD的那些。检测

RSA_verify中的格式正确,因此两种形式都可以透明地工作。

[史蒂夫汉森]

*)如果我们最初指出,一些支持TLS 1.0的服务器可能会阻塞

支持TLS 1.2及更高版本在RSA中使用TLS 1.0重新协商

加密的premaster秘密。作为解决方法使用允许的最大值

客户端版本在客户端问候,这应该让这些服务器满意

并且仍然可以使用以前版本的OpenSSL。

[史蒂夫汉森]

*)添加对TLS / DTLS心跳的支持。

[Robin Seggelmann <seggelmann@fh-muenster.de>]

*)添加对SCTP的支持。

[Robin Seggelmann <seggelmann@fh-muenster.de>]

*)改进了VOS的PRNG播种。

[Paul Green <Paul.Green@stratus.com>]

*)广泛的汇编程序包更新,最值得注意的是:

- x86 [_64]:AES-NI,PCLMULQDQ,RDRAND支持;

- x86 [_64]:SSSE3支持(SHA1,vector-permutation AES);

- x86_64:位切片AES实现;

- ARM:NEON支持,当代平台优化;

- s390x:z196支持;

- *:GHASH和GF(2 ^ m)乘法实现;

[安迪波利亚科夫]

*)使TLS-SRP代码符合RFC 5054 API清理

(删除不必要的代码)

[Peter Sylvester <peter.sylvester@edelweb.fr>]

*)从RFC 5705添加TLS密钥材料导出器。

[Eric Rescorla]

*)从RFC 5764添加DTLS-SRTP协商。

[Eric Rescorla]

*)添加下一个协议谈判,

http://tools.ietf.org/html/draft-agl-tls-nextprotoneg-00。可

使用no-npn标志禁用配置或配置。代码捐赠

由谷歌。

[Adam Langley <agl@google.com>和Ben Laurie]

*)添加椭圆曲线NIST-P224的可选64位优化实现,

NIST-P256,NIST-P521,具有恒定时间单点乘法功能

典型的输入。编译器支持非标准类型__uint128_t是

需要使用它(存在于gcc 4.4及更高版本中,用于64位版本)。

代码在Apache许可证2.0版下提供。

在Configure(或config)命令中指定“enable-ec_nistp_64_gcc_128”

将此包含在您的OpenSSL构建中,并运行“make depend”(或

“make update”)。这将启用以下EC_METHOD:

EC_GFp_nistp224_method()

EC_GFp_nistp256_method()

EC_GFp_nistp521_method()

EC_GROUP_new_by_curve_name()将自动使用这些(同时

EC_GROUP_new_curve_GFp()目前更喜欢更灵活

实现)。

[EmiliaKäsper,Adam Langley,Bodo Moeller(谷歌)]

*)使用ssize_t的类型ossl_ssize_t instad,它不可用

所有平台。将ssize_t定义从e_os.h移动到公共

头文件e_os2.h,因为它现在出现在公共头文件cms.h中

[史蒂夫汉森]

*)ca,req和x509实用程序的新-sigopt选项。额外

签名参数可以使用此选项传递

特别是PSS。

[史蒂夫汉森]

*)添加RSA PSS签名功能。这将生成并设置

适用于PSS的AlgorithmIdentifiers基于

相应的EVP_MD_CTX结构。尚无应用支持。

[史蒂夫汉森]

*)支持伴随算法特定的ASN1签名例程。

新功能ASN1_item_sign_ctx()签署预先初始化的

EVP_MD_CTX结构并基于设置AlgorithmIdentifiers

适当的参数。

[史蒂夫汉森]

*)添加新算法特定的ASN1验证初始化功能

到EVP_PKEY_ASN1_METHOD:由于ASN1,这不在EVP_PKEY_METHOD中

无论使用什么EVP_PKEY_METHOD,处理都是相同的。

添加PSS处理程序以支持PSS签名的验证:已选中

反对许多样本证书。

[史蒂夫汉森]

*)为PSS添加签名打印。添加PSS OID。

[Steve Henson,Martin Kaiser <lists@kaiser.cx>]

*)添加算法特定的签名打印。单独的ASN1方法

现在可以打印出签名而不是标准的十六进制转储。

更复杂的签名(例如PSS)可以打印出更有意义的签名

信息。包括打印出签名的DSA版本

参数r,s。

[史蒂夫汉森]

*)CMS库的基于密码的收件人信息支持:实施

RFC3211。

[史蒂夫汉森]

*)将基于密码的加密分为PBES2和PBKDF2功能。这个

整齐地将代码分成密码和PBE部分,这是必需的

对于一些将PBES2分成单独部分的算法(例如

基于密码的CMS)。

[史蒂夫汉森]

*)会话处理修复:

- 修复使用会话ID恢复连接的处理,

还支持Session Tickets。

- 修复了一个错误,如果客户端阻止发出新票证

提交了一张过期会议的门票。

- 尝试将票证生命周期提示设置为合理的值。

- 通过排除不相关的信息来缩短机票。

- 在客户端,不要忽略续订的门票。

[Adam Langley,Bodo Moeller(谷歌)]

*)修复PSK会话表示。

[Bodo Moeller]

*)添加RC4-MD5和AESNI-SHA1“缝合”实现。

这项工作由英特尔赞助。

[安迪波利亚科夫]

*)将GCM支持添加到TLS库。拆分需要一些自定义代码

固定(来自PRF)和显式(来自TLS记录)之间的IV

部分。这将添加RFC5288和支持的所有GCM密码套件

RFC5289。概括一些AES *密码串以包括GCM和

仅为GCM添加​​特殊的AESGCM字符串。

[史蒂夫汉森]

*)扩展AES GCM的ctrls范围。允许设置调用

仅在加密时解密和检索调用字段的字段。

[史蒂夫汉森]

*)从RFC5289添加HMAC ECC密码套件。包括SHA384 PRF支持。

根据RFC5289的要求,如果适用,则不能使用这些密码套件

早于1.2的TLS版本。

[史蒂夫汉森]

*)对于支持FIPS的OpenSSL,解释NULL默认公钥方法

如未设置并返回相应的默认值但不*设置默认值。

这意味着我们可以在应用程序中返回适当的方法

在FIPS和非FIPS模式之间切换。

[史蒂夫汉森]

*)在FIPS模式下将HMAC和CMAC操作重定向到FIPS模块。如果

使用ENGINE然后我们无法处理FIPS模块中的那个,所以我们

如果允许非FIPS操作,请保留原始代码。

[史蒂夫汉森]

*)为openssl实用程序添加-attime选项。

[Peter Eckersley <pde@eff.org>,Ben Laurie和Steve Henson]

*)在FIPS模式下将DSA和DH操作重定向到FIPS模块。

[史蒂夫汉森]

*)在FIPS模式下将ECDSA和ECDH操作重定向到FIPS模块。也用

现在无条件地使用FIPS EC方法。

[史蒂夫汉森]

*)新建选项no-ec2m禁用特征2代码。

[史蒂夫汉森]

*)从1.1.0-dev返回libcrypto审计返回值检查; 不

所有情况都可以涵盖,因为一些引入二进制不兼容性。

[史蒂夫汉森]

*)将RSA操作重定向到FIPS模块,包括keygen,

加密,解密,签名和验证。阻止使用非FIPS RSA方法。

[史蒂夫汉森]

*)为密码添加类似的低级API阻止。

[史蒂夫汉森]

*)FIPS模式下不批准低级摘要API:任何尝试

使用这些将导致致命错误。*真正*想要的应用程序

使用它们可以使用private_ *版本。

[史蒂夫汉森]

*)将密码操作重定向到FIPS模块以进行FIPS构建。

[史蒂夫汉森]

*)将摘要操作重定向到FIPS模块以进行FIPS构建。

[史蒂夫汉森]

*)更新构建系统以添加将在fipscanister.o中链接的“fips”标志

对于静态和共享库构建,如果需要,嵌入签名。

[史蒂夫汉森]

*)按优先顺序而不是数字输出TLS支持的曲线

订购。目前,这是首先对最高阶曲线进行硬编码。

这应该是可配置的,因此应用程序可以判断速度与强度。

[史蒂夫汉森]

*)添加TLS v1.2服务器支持以进行客户端身份验证。

[史蒂夫汉森]

*)在ssl库中添加对FIPS模式的支持:禁用SSLv3,非FIPS密码

并启用MD5。

[史蒂夫汉森]

*)函数FIPS_mode_set()和FIPS_mode()调用底层函数

FIPS模块版本。

[史蒂夫汉森]

*)添加TLS v1.2客户端支持以进行客户端身份验证。保持缓存

握手记录更长,因为我们不知道要使用的哈希算法

直到收到证书请求消息之后。

[史蒂夫汉森]

*)初始TLS v1.2客户端支持。添加默认签名算法

扩展包括我们支持的所有算法。解析新签名

客户密钥交换中的格式。放宽一些ECC签名限制

RFC5246中指出的TLS v1.2。

[史蒂夫汉森]

*)为TLS v1.2签名算法扩展添加服务器支持。开关

使用客户端摘要首选项在需要时使用新的签名格式。

现在,所有服务器密码套件都应该在TLS v1.2中正常运行。没有客户

支持但不支持客户端证书。

[史蒂夫汉森]

*)初始TLS v1.2支持。添加新的SHA256摘要到ssl代码,切换

使用TLS v1.2及更高版本时,对于PRF,使用SHA256。添加新的SHA256

密码套件。目前只有RSA密钥交换密码套件才能使用

TLS v1.2。为TLS v1.2添加新选项,替换旧的和过时的

带有SSL_OP_NO_TLSv1_2的SSL_OP_PKCS1_CHECK标志。新的TLSv1.2方法

和版本检查。

[史蒂夫汉森]

*)新选项OPENSSL_NO_SSL_INTERN。如果可以编译应用程序

使用此定义,它不会受到ssl内部更改的影响

结构。添加几个实用程序函数以允许openssl应用程序

使用OPENSSL_NO_SSL_INTERN定义。

[史蒂夫汉森]

*)一个长期补丁,为EdelWeb增加了对SRP的支持(Peter

西尔维斯特和Christophe Renou)融为一体。

[Christophe Renou <christophe.renou@edelweb.fr>,Peter Sylvester

<peter.sylvester@edelweb.fr>,Tom Wu <tjw@cs.stanford.edu>,以及

本劳瑞]

*)添加函数以复制EVP_PKEY_METHOD并检索标志和id。

[史蒂夫汉森]

*)使用该功能重新协商时,允许缩写握手

SSL_renegotiate_abbreviated()。

[Robin Seggelmann <seggelmann@fh-muenster.de>]

*)添加对ENGINE_register_all_complete()的调用

ENGINE_load_builtin_engines(),因此使用了一些实现

自动而不是需要显式的应用支持。

[史蒂夫汉森]

*)如RFC5705中所述,添加对TLS密钥导出器的支持。

[Robin Seggelmann <seggelmann@fh-muenster.de>,Steve Henson]

*)初始TLSv1.1支持。由于TLSv1.1仅与TLS v1.0非常相似

需要进行一些更改:

添加SSL_OP_NO_TLSv1_1标志。

添加TLSv1_1方法。

更新版本检查逻辑以处理1.1版。

添加显式IV处理(从DTLS代码移植)。

将命令行选项添加到s_client / s_server。

[史蒂夫汉森]

免责声明:文章转载自《升级openssl 支持TLS1.2》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇C# DateTime 赋空值uni-app 中如何打开外部应用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Python3 os模块及操作文件和目录

1. os模块相关操作:os模块主要处理操作系统的相关的功能 os.name 获取操作系统平台 os.getcwd() 获取现在的工作目录 os.listdir() 获取某个目录下的所有文件名 os.system() 用来运行shell命令 os.remove() 删除某...

python3 + Django + Mysql + Vue + Element-UI 学习笔记:从0搭建前后端分离的测试工具平台

2020.03.23  INIT 中间换了工作,好久没写了 2021.05.08  新增:页面预览、功能实现样例(含后端接口、前端页面、配置绑定) 2021.05.13  新增:首页增加访问人数统计功能 2021.05.19  新增:用户信息查询接口、页面开发 2021.06.10  新增:生成图片功能 2021.06.18  新增:文本处理工具下载页面...

influxdb简单使用

之前对influxdb有一个简单的了解和入门的使用,近期由于想使用influxdb做一点东西玩玩,又要捡起influxdb。本篇就针对influxdb的数据库、表的概念,增删改查操作、RESTful操作等做下总结。 一、influxdb与传统数据库的比较 库、表等比较: influxDB 传统数据库中的概念 database 数据库 meas...

OpenSSL简单介绍及在Windows、Linux、Mac系统上的编译步骤

OpenSSL介绍:OpenSSL是一个强大的安全套接字层password库,囊括基本的password算法、经常使用的密钥和证书封装管理功能及SSL协议。并提供丰富的应用程序供測试或其他目的使用。 SSL是SecureSockets Layer(安全套接层协议)的缩写,能够在Internet上提供秘密性传输。其目标是保证两个应用间通信的保密性和可靠性,...

戳进来呗!五分钟就学会Python3怎么修改Excel数据(xlwt使用)

上次我们看过了xlrd的使用方法,那么怎么对Excel执行修改操作的?对于旧版的Excel文件我们用xlwt,但是对于新版的xlsx文件,使用openpyxl更合适一些。xlwt的使用比较简单,我们赶快开始学习吧 安装 安装和xlrd一样,pip install xlwt 创建对象 workbook = xlwt.Workbook() 创建表单对象 我们...

如何使用PHP生成图片

79 /** 80 * 从图片文件创建Image资源 81 * @param $file 图片文件,支持url 82 * @return bool|resource 成功返回图片image资源,失败返回false 83 */ 84 function createImageFromFile($file){ 85 if(pr...