[archlinux][tls] archlinux下使curl支持sslv3的方法

描述

在archlinux下,希望使用curl产生一条使用sslv3的https访问请求。

使用curl的如下命令:

curl -k -vvv --sslv3 https://192.168.7.9:8080

然而很遗憾,因为sslv3太老了,所以它不支持,

╰─>$ curl -k -vvv --sslv3 https://192.168.7.9:8080
*   Trying 192.168.7.9:8080...
* TCP_NODELAY set
* Connected to 192.168.7.9 (192.168.7.9) port 8080 (#0)
* OpenSSL was built without SSLv3 support
* Closing connection 0
curl: (4) OpenSSL was built without SSLv3 support

根据提示,是openssl不支持。用openssl自身提供的工具进行验证,果然是不支持的,连这个参数也没有。

╰─>$ openssl s_client -ssl3 -connect t9:5000 -CAfile ~/Keys/https/root/root.cer -servername test3.www.local
s_client: Option unknown option -ssl3
s_client: Use -help for summary.

man openssl s_client可以看到,这个选项是依赖编译时的。

       -ssl3, -tls1, -tls1_1, -tls1_2, -tls1_3, -no_ssl3, -no_tls1, -no_tls1_1, -no_tls1_2, -no_tls1_3
           These options require or disable the use of the specified SSL or TLS protocols.  By default s_client will negotiate the highest mutually supported protocol version.
           When a specific TLS version is required, only that version will be offered to and accepted from the server.  Note that not all protocols and flags may be available,
           depending on how OpenSSL was built.

[class_tong @ 20191031]

重编openssl

openssl在默认的编译选项里关闭了SSLv3,只需要增加如下的编译选项,即可完成支持SSLv3的重新编译:

enable-ssl3. (enable-ssl3-method 是干嘛的???)

./Configure enable-ssl3 enable-ssl3-method linux-x86_64

二 archlinux 打包

我的openssl是包管理的,为了方便版本管理,我需要打个包。

a, 首先去下载源包的打包脚本, https://git.archlinux.org/svntogit/packages.git/tree/trunk?h=packages/openssl

-rw-r--r--    PKGBUILD
-rw-r--r--    ca-dir.patch

修改PKGBUILD

╰─>$ diff PKGBUILD.org  PKGBUILD
7c7
< pkgrel=1
---
> pkgrel=2
15c15
< source=("https://www.openssl.org/source/${pkgname}-${_ver}.tar.gz"{,.asc}
---
> source=("${pkgname}-${_ver}.tar.gz"
35c34
<               shared no-ssl3-method enable-ec_nistp_64_gcc_128 linux-x86_64 ---
>               shared enable-ssl3 enable-ssl3-method enable-ec_nistp_64_gcc_128 linux-x86_64 \

改了,版本号,文件路径,编译选项。

b 把一份源码带包到当前目录 openssl-1.1.1d.tar.gz, 然后运行makepkg命令生效安装包 openssl-1.1.1.d-2-x86_64.pkg.tar.xz

c 安装新的包,替换官方包

sudo pacman -U openssl-1.1.1.d-2-x86_64.pkg.tar.xz

三 测试

更新之后,使用前文的curl和openssl命令分别测试,openssl s_client已经支持了sslv3,但是curl仍然不支持。

╰─>$ openssl s_client -ssl3 -connect t9:5000 -CAfile ~/Keys/https/root/root.cer -servername test3.www.local
CONNECTED(00000003)
140060394198272:error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert
...
SSL-Session:
    Protocol  : SSLv3
...

握手虽然失败,但那是server的问题。

重新编译 curl

在github下载最新的curl代码。使用如下命令重新编译,

这里需要注意的是:一,编译选项已经默认使用ssl。二,在archlinux下openssl不区分开发包和运行包,所以编译过程中curl

会默认的使用系统路径下的openssl进行链接,也就是上文中我们刚刚修改过的。

bash-5.0$ ./buildconf
bash-5.0$ ./configure
bash-5.0$ make

另外, 提一点关于autoconf的迷思,如果没有buildconf命令的话,需要先后执行如下的命令,以替代之:

bash-5.0$ aclocal
bash-5.0$ autoheader
bash-5.0$ autoconf
bash-5.0$ automake

最后

最后生出来的curl是静态链接的,与计划有点差距。(当然变成动态的也不难,不过那不是我们所关心的。)

╰─>$ ldd src/curl
        not a dynamic executable

总之,现在可以sslv3了

─>$ ./src/curl -k -vvv --sslv3 https://192.168.7.9:8080
*   Trying 192.168.7.9:8080...
* TCP_NODELAY set
* Connected to 192.168.7.9 (192.168.7.9) port 8080 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: /etc/ssl/certs/ca-certificates.crt
  CApath: none
* SSLv3 (OUT), TLS handshake, Client hello (1):
* SSLv3 (IN), TLS alert, handshake failure (552):
* error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure
* Closing connection 0
curl: (35) error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure

[class_tong @ 20191031]

原文地址:https://www.cnblogs.com/hugetong/p/11773663.html

时间: 2024-08-27 12:18:04

[archlinux][tls] archlinux下使curl支持sslv3的方法的相关文章

windows 下使clion支持c++11操作记录

最近用上了windows下的clion,发现默认安装的MINGW版本太低,导致所带的gcc版本竟然是3.5的,实在太老了,不支持c++11,于是手动修改了mingw的版本.首先去mingw的官网下载最新的-mingw-get-setup.exe可执行文件,下载过了来的时候其实文件名是-mingw-get-setup.exe-r,去掉最后面的-r即可开始执行.开始执行之后,基本上默认安装即可,可是麻烦的是在安装的最后还需要下载大量的相关文件,那个选择安装包的软件叫MinGW Installer m

centos7下使nginx支持uwsgi

一:nginx的配置 二.uwscgi的配置 原文地址:https://www.cnblogs.com/changfan/p/11965698.html

window下开启php支持openssl 的方法

在安装腾讯微博API程序iweobo时,发现PHP不支持openssl_open(),如何在PHP扩展里打开php openssl支持? 1.打开PHP目录,在php.ini中把“extension=php_openssl.dll”前面的“;”去掉 2.复制php安装目录中的: libeay32.dll.ssleay32.dll至c:windowssystem32 3.复制php_openssl.dll至c:windowssystem32 4.重启IIS或者apache环境 这样就可以打开php

Windows下配置PHP支持LDAP扩展方法(wampserver)

在网上搜了好多文章都不行呢,大都是没有开启扩展的问题,可是我的是开启的. 终于看到一篇文章,因为我用的是wampserver.下面是文章原话: 然后你发现上面的提示依旧,因为这是网上大多能查到的资料的记载,然后找了dll的依赖列表发现,其实加载ldap扩展还依赖一个dll文件,那就是 libsasl.dll,如果你使用的是wampserver的花,系统加载的是apache目录的bin(php.ini也在这个目录里面的),那么需要从php目录里把这个文件复制到apache/bin里面或者syste

Linux下安装libiconv使php支持iconv函数

libiconv组件安装好了可以让我们php支持iconv函数了,这个函数的作用就是字符编码强制转换了,下面和111cn小编一起来看一个Linux中安装libiconv使php支持iconv函数的例子吧. 问题: 线上运行的lamp服务器,php不支持iconv函数. 解决方法: 安装libiconv,重新编译apache,使php支持iconv函数,实现utf-8和gb2312编码的转换. 具体步骤: 1.下载libiconv cd /usr/local/src wget http://ftp

windows下使用curl命令 &amp;&amp; 常用curl命令

什么是curl命令? curl是利用URL语法在命令行方式下工作的开源文件传输工具.它被广泛应用在Unix.多种Linux发行版中,并且有DOS和Win32.Win64下的移植版本. 如何在windows下使用curl命令? 第一步: 进入curl下载官网,下载合适的版本,我这里下载的是windows 64位的curl. 其中我下载的zip文件.  另外CAB文件也是压缩文件,这是微软出品,不太好用,建议使用zip压缩文件. 第二步: 解压缩文件,然后找到该文件目录下的bin子文件(bin即二进

windows下使用curl命令&amp;&amp;常用curl命令

什么是curl命令? curl是利用URL语法在命令行方式下工作的开源文件传输工具.它被广泛应用在Unix.多种Linux发行版中,并且有DOS和Win32.Win64下的移植版本. 如何在windows下使用curl命令? https://curl.haxx.se/windows/ 第一步: 进入curl下载官网,下载合适的版本,我这里下载的是windows 64位的curl. 其中我下载的zip文件. 另外CAB文件也是压缩文件,这是微软出品,不太好用,建议使用zip压缩文件. 第二步: 解

Linux环境下使用图形化界面的SVN客户端软件-RabbitVCS

如果想在Linux环境下使用图形化界面的SVN客户端软件,那么RabbitVCS绝对是首选,可以媲美Windows环境下用的TortoiseSVN,甚至连操作都基本一样,所以强烈推荐给各位童鞋. RabbitVCS基本支持所有的Linux发行版本包括Ubuntu.Debian.Fedora.Arch Linux.Gentoo.Mandriva.OpenSUSE.RHEL.CentOS 5等.其官网地址为http://www.rabbitvcs.org/ 在ubuntu下安装 首先添加源: sud

配置apache使之支持浏览器端的缓存

当直接在浏览器中输入一个URL,或者点击一个链接的时候,那么浏览器缓存就会起作用,如果缓存没有过期,那么浏览器会从本地读取资源,不会发起HTTP请求,如果缓存过期,那么浏览器会发起新的浏览器请求. 一.适用直接访问,非F5刷新页面的情况下 Expires是HTTP/1.0的缓存头, Cache-Control: max-age 是HTTP/1.1是用来进行HTTP缓存的头.Expires指定了资源过期的绝对时间,GMT格式,Cache-Control: max-age指定了资源过期的相对时间,单