zoukankan      html  css  js  c++  java
  • 升级openssl 支持TLS1.2

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

         [史蒂夫汉森]

  • 相关阅读:
    13.kubernetes之pv,pvc,configmap(带补充实例)
    1.docker 数据卷的备份和恢复(非大数据量)
    mysql基础 事务的认识和使用
    jdbc基础 (四) 批处理
    jdbc基础 (三) 大文本、二进制数据处理
    mysql使用基础 sql语句(一)
    linux下安装openssh-server
    jdbc基础 (二) 通过properties配置文件连接数据库
    jdbc基础 (一) MySQL的简单使用
    windows API 开发飞机订票系统 图形化界面 (四)
  • 原文地址:https://www.cnblogs.com/fqnb001/p/12382393.html
Copyright © 2011-2022 走看看