• 周三. 6月 29th, 2022

5G编程聚合网

5G时代下一个聚合的编程学习网

热门标签

升级openssl 支持TLS1.2

admin

11月 28, 2021

支持TLS1.2,本文解决了我的疑问,转载于https://www.cnblogs.com/blueyunchao0618/p/11419615.html

背景:

现在许多网站,都要求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。

[[email protected] 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 <[email protected]>]

 

  *)添加对SCTP的支持。

     [Robin Seggelmann <[email protected]>]

 

  *)改进了VOS的PRNG播种。

     [Paul Green <[email protected]>]

 

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

 

        –  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 <[email protected]>]

 

  *)从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 <[email protected]>和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 <[email protected]>]

 

  *)添加算法特定的签名打印。单独的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 <[email protected]>,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 <[email protected]>,Peter Sylvester

     <[email protected]>,Tom Wu <[email protected]>,以及

     本劳瑞]

 

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

     [史蒂夫汉森]

 

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

     SSL_renegotiate_abbreviated()。

     [Robin Seggelmann <[email protected]>]

 

  *)添加对ENGINE_register_all_complete()的调用

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

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

     [史蒂夫汉森]

 

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

     [Robin Seggelmann <[email protected]>,Steve Henson]

 

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

     需要进行一些更改:

 

       添加SSL_OP_NO_TLSv1_1标志。

       添加TLSv1_1方法。

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

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

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

     [史蒂夫汉森]

全力以赴不留遗憾

发表评论

您的电子邮箱地址不会被公开。