升级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.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。

     [史蒂夫汉森]

 

posted @ 2019-08-27 17:22  blueyunchao  阅读(17811)  评论(0编辑  收藏  举报