https在linux下的使用,以及arm平台上的使用…
ubuntu下的调用
安装
sudo apt-get install libcurl4-openssl-dev
默认安装目录:/usr/include/curl/
。
测试:
1 | curl https://www.baidu.com |
例子
1 | // https.cpp |
1 | g++ https.cpp -o https |
arm板上curl移植
因为要支持https需要移植openssl和curl。其中要注意只有在curl加入openssl才能支持https。
openssl移植
开发环境:
- ubuntu18.04
- 交叉编译器:arm-himix200-linux-
移植步骤:
- 从OpenSSL官网下载最新源码;
- 解压缩:
tar zxvf openssl-1.1.1g.tar.gz
; - 执行: 我的cpuinfo:
1
2
3
4
5
6
7
8
9
10cd openssl-1.1.1g
mkdir build_hisimix200
./Configure --prefix=$PWD/build_hisimix200 --cross-compile-prefix=arm-himix200-linux- no-asm shared linux-armv4 -march=armv7-a -D__ARM_MAX_ARCH__=7
# no-asm:是在交叉编译过程中不使用汇编代码代码加速编译过程,原因是它的汇编代码是对arm格式不支持的。
# shared :生成动态连接库。
# --prefix :指定make install后生成目录的路径,不修改此项则默认为OPENSSLDIR目录(/usr/local/ssl)。
# setarch i386:声明生成的是32位CPU,如果是64位CPU则去除该部分。
# CROSS_COMPILE:设置交叉编译器,注意,在这之前保证该编译器已经设置好环境变量
# shared后面的参数,到arm开发板上,输入:`cat /proc/cpuinfo`
- 修改Makefile(海思芯片跳过此步骤):
1
删除 CFLAG= 中的-m64
- 执行下面命令,编译OpenSSL库:
1
make
- 执行下面命令,将编译好的库文件拷贝到指定目录:
1
make install
- include下文件在编译程序的时候需要指定include的路径。而lib下在程序运行时会用到,需要将lib下文件拷贝到开发板中。在项目的Makefile文件里头加入openssl的头文件和库文件的声明,此时需要注意引用库的顺序为:-lssl -lcrypto,如果为 -lcrypto -lssl就会编译错误。
- 查询pem或crt等证书文件有效日期:
openssl x509 -in <证书请求文件> -noout -dates
; - 查询证书内容:
openssl x509 -in cert.pem -noout -text
; - 打印证书序列号:
openssl x509 -in cacert.pem -noout -serial
; - 打印出证书的拥有者名字:
openssl x509 -in cert.pem -noout -subject
; - 以RFC2253规定的格式打印出证书的拥有者名字:
openssl x509 -in cert.pem -noout -subject -nameopt RFC2253
; - 在支持UTF8的终端一行过打印出证书的拥有者名字:
openssl x509 -in cert.pem -noout -subject -nameopt oneline -nameopt -escmsb
; - 打印出证书的MD5特征参数:
openssl x509 -in cert.pem -noout -fingerprint
;
curl移植
开发环境:
- Ubuntu 18.04
- 交叉编译:arm-himix200-linux-
- curl-7.73.0.tar.gz
移植步骤:
- 下载最新源码curl-7.73.0.tar.gz;
- 解压缩:
1
2tar zxvf curl-7.73.0.tar.gz
cd curl-7.73.0 - 执行下面指令,做相应的配置: 完成后注意关注ssl是否为enable状态:
1
2
3
4mkdir build_hisimix200
./configure --prefix=$PWD/build_hisimix200 CC=arm-himix200-linux-gcc --host=arm-himix200-linux --with-ssl=/opt/hisi-linux/x86-arm/arm-himix200-linux/thirdpart/openssl_hisimix200
# --with-ssl: 上个步骤中生成的文件的路径(***/build_hisi),我的将上个步骤的build_hisi中的所有文件复制到了/opt/hisi-linux/x86-arm/arm-himix200-linux/thirdpart/openssl_arm目录下。1
2make
make install - 将build_hisimix200/文件夹下的所有文件拷贝到开发板上。
安装完成后,将bin文件夹中的curl拷贝到开发板,验证是否可用:
1 | curl https://www.baidu.com -k # -k表示不验证CA证书 |
- 如果问题请下载最新cacert.pem;
- 如果提示证书无效,可以尝试更新系统时间
ntpdate
;
配置证书变量:
1 | cp cacert.pem /etc/curlssl/cacert.pem |
使用
- 方法一:使用静态库:从两个步骤中分别有libcurl.a,libssl.a,libcrypto.a;
- 方法二:使用动态库:分别为libcur.so.4,libssl.so.1.1,libcrypto.so.1.1;
以下例子将包含include中的curl文件夹拷贝到与cpp同目录,如果不拷贝可以设置系统环境变量链接到放置的位置。
1 | // https.cpp |
另外,如使用静态库编译,加入-lpthread -ldl设置,如没有该库,另外编译即可。