升级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
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下。
下载pycurl-7.21.5.tar.gz
python setup.py install --curl-config=/usr/bin/curl-config
注意--curl-config参数是curl 库安装产生的curl-config文件路径。
附录:
1.0.0h和1.0.1之间的变化[2012年3月14日]
*)添加与使用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。
[史蒂夫汉森]