[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:...
* TCP_NODELAY set
* Connected to 192.168.7.9 (192.168.7.9) port (#)
* OpenSSL was built without SSLv3 support
* Closing connection
curl: () OpenSSL was built without SSLv3 support
根据提示,是openssl不支持。用openssl自身提供的工具进行验证,果然是不支持的,连这个参数也没有。
╰─>$ openssl s_client -ssl3 -connect t9: -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.
重编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=
---
> pkgrel=
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..d--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:...
* TCP_NODELAY set
* Connected to 192.168.7.9 (192.168.7.9) port (#)
* 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 ():
* SSLv3 (IN), TLS alert, handshake failure ():
* error::SSL routines:ssl3_read_bytes:sslv3 alert handshake failure
* Closing connection
curl: () error::SSL routines:ssl3_read_bytes:sslv3 alert handshake failure
[archlinux][tls] archlinux下使curl支持sslv3的方法的更多相关文章
- windows 下使clion支持c++11操作记录
最近用上了windows下的clion,发现默认安装的MINGW版本太低,导致所带的gcc版本竟然是3.5的,实在太老了,不支持c++11,于是手动修改了mingw的版本.首先去mingw的官网下载最 ...
- Windows下配置PHP支持LDAP扩展方法(wampserver)
在网上搜了好多文章都不行呢,大都是没有开启扩展的问题,可是我的是开启的. 终于看到一篇文章,因为我用的是wampserver.下面是文章原话: 然后你发现上面的提示依旧,因为这是网上大多能查到的资料的 ...
- destoon模块自定义字段的添加并让其支持搜索的方法
今天看了看模块设置里的自定义字段功能的用法,试着加了个新字段glry,设置了值,然后去数据库moduleid的article表看,字段成功加上了. 于是去template下article文件夹的lis ...
- C#中扩展StringBuilder支持链式方法
本篇体验扩展StringBuilder使之支持链式方法. 这里有一个根据键值集合生成select元素的方法. private static string BuilderSelectBox(IDicti ...
- 记一次在mac上源码编译curl,使其支持NSS的过程
一.背景 在一次学习https原理的过程中,希望客户端指定特定的cipher suites来抓包分析SSL/TLS的握手过程,就想到了使用curl工具,而不是使用浏览器. 接下来使用man curl找 ...
- Apache下开启SSI配置使html支持include包含
写页面的同学通常会遇到这样的烦恼,就是页面上的 html 标签越来越多的时候,寻找指定的部分就会很困难,那么能不能像 javascript 一样写在不同的文件中引入呢?答案是有的,apache 能做到 ...
- Apache下开启SSI配置,使html支持include包含
有的时候,我们的页面有公共的导航栏navbar,公共的脚注footer,那么我们就想把这些公共部分独立成一个html文件,在要引用的地方像引用js,css一样,给包含进来. Apache下开启SSI配 ...
- Linux下安装libiconv使php支持iconv函数
libiconv组件安装好了可以让我们php支持iconv函数了,这个函数的作用就是字符编码强制转换了,下面和111cn小编一起来看一个Linux中安装libiconv使php支持iconv函数的例子 ...
- windows下使用curl命令 && 常用curl命令
什么是curl命令? curl是利用URL语法在命令行方式下工作的开源文件传输工具.它被广泛应用在Unix.多种Linux发行版中,并且有DOS和Win32.Win64下的移植版本. 如何在windo ...
随机推荐
- [LeetCode] 47. Permutations II 全排列 II
Given a collection of numbers that might contain duplicates, return all possible unique permutations ...
- 【编程开发】x86,I386,i686, x86_64, x64,amd64、Windows Linux AIX下查看CPU位数和操作系统位数、rpm包名
a2ps-4.13b-57.2.el5.i386.rpm 每一个rpm包的名称都由"-"和"."分成了若干部分.就拿 a2ps-4.13b-57.2.el5.i ...
- java中的Stream流
java中的Stream流 说到Stream便容易想到I/O Stream,而实际上,谁规定"流"就一定是"IO流"呢?在Java 8中,得益于Lambda所带 ...
- Apache ZooKeeper在Kafka中的角色 - 监控和配置
1.目标 今天,我们将看到Zookeeper在Kafka中的角色.本文包含Kafka中需要ZooKeeper的原因.我们可以说,ZooKeeper是Apache Kafka不可分割的一部分.在了解Zo ...
- ubuntu sh脚本激活conda 虚拟环境
第一步:初始化coda 命令:sudo gedit ~/.bashrc 第二部:复制其中这样一段代码 # >>> conda initialize >>> # !! ...
- 重新安装Eclipse的一些配置
工欲善其事,必先利其器.工具做好调整可以让我们事半功倍. 以下设置均在window-->preferences中 1.首先修改工作空间字符集为UTF-8 2.修改字体大小 3.修改Java代码提 ...
- Spring Boot取消默认tomcat启动,打成war包发布到服务器运行
一.设置打包方式 在pom.xml中设置打包格式 <packaging>war</packaging> 二.取消Spring Boot的tomcat <!--部署成war ...
- DS 图解归并排序
经典排序三剑客: 归并,堆排,快排. 今天,图解归并,一步步带你手撕代码~ 归并排序,是采用"分而治之"思想的一个典型应用. 分治法精髓: 1.分 --- 将问题分解成若干个规模更 ...
- 【LEETCODE】50、数组分类,简单级别,题目:888,1013,896,485,448,697
package y2019.Algorithm.array; import java.util.HashSet; import java.util.Set; /** * @ProjectName: c ...
- Spring AOP 创建Advice 基于Annotation
public interface IHello { public void sayHello(String str); } public class Hello implements IHello { ...