hexdump 查看二进制文件

echo "https://const.net.cn" > bin.data
hesy@hesy-ThinkPad-P15v-Gen-1:~/2021/linux$ hexdump -C bin.data 
00000000  68 74 74 70 73 3a 2f 2f  63 6f 6e 73 74 2e 6e 65  |https://const.ne|
00000010  74 2e 63 6e 0a                                    |t.cn.|
00000015

hexdump 自定义格式显示二进制文件

hexdump -e '4/1 "%02X " "\n"' bin.data 
68 74 74 70
73 3A 2F 2F
63 6F 6E 73
74 2E 6E 65
74 2E 63 6E
0A         
hexdump -e '8/1 "%02X " "\n"' bin.data 
68 74 74 70 73 3A 2F 2F
63 6F 6E 73 74 2E 6E 65
74 2E 63 6E 0A         
hexdump -e '16/1 "%02X " "\n"' bin.data 
68 74 74 70 73 3A 2F 2F 63 6F 6E 73 74 2E 6E 65
74 2E 63 6E 0A                                 
hexdump -e '16/1 "%_p " "\n"' bin.data 
h t t p s : / / c o n s t . n e
t . c n .           
hexdump -e '16/1 "%03d " "\n"' bin.data 
104 116 116 112 115 058 047 047 099 111 110 115 116 046 110 101
116 046 099 110 010 

hexdump 将二进制文件转为十六进制文件

hexdump -e '16/1 "%02X " "\n"' bin.data > hex.data
xxd -r -p hex.data bin.data.1
md5sum *
84d86c7c482190d90838c5de11d99d06  bin.data
84d86c7c482190d90838c5de11d99d06  bin.data.1
a100e4d2a6bcf2faceb56f106dfb1c6b  hex.data

xxd 查看二进制文件

xxd -c 4 -p bin.data 
68747470
733a2f2f
636f6e73
742e6e65
742e636e
0a
xxd -c 8 -p bin.data 
68747470733a2f2f
636f6e73742e6e65
742e636e0a
xxd -c 16 -p bin.data 
68747470733a2f2f636f6e73742e6e65
742e636e0a

xxd 将十六进制文件转为二进制文件

xxd -r -p input.txt output.bin    
xxd -c 16 -p bin.data > hex.data
xxd -r -p hex.data bin.data.1
md5sum *
84d86c7c482190d90838c5de11d99d06  bin.data
84d86c7c482190d90838c5de11d99d06  bin.data.1
2d8c913c2685ef14e39fa97a28c3ad79  hex.data

                        

package main
import "fmt"
import "net/url"
import "strings"
func main() {
//我们将解析这个 URL 示例,它包含了一个 scheme,认证信息,主机名,端口,路径,查询参数和片段。
    s := "postgres://user:pass@host.com:5432/path?k=v#f"
//解析这个 URL 并确保解析没有出错。
    u, err := url.Parse(s)
    if err != nil {
        panic(err)
    }
//直接访问 scheme。
    fmt.Println(u.Scheme)
//User 包含了所有的认证信息,这里调用 Username和 Password 来获取独立值。
    fmt.Println(u.User)
    fmt.Println(u.User.Username())
    p, _ := u.User.Password()
    fmt.Println(p)
//Host 同时包括主机名和端口信息,如过端口存在的话,使用 strings.Split() 从 Host 中手动提取端口。
    fmt.Println(u.Host)
    h := strings.Split(u.Host, ":")
    fmt.Println(h[0])
    fmt.Println(h[1])
//这里我们提出路径和查询片段信息。
    fmt.Println(u.Path)
    fmt.Println(u.Fragment)
//要得到字符串中的 k=v 这种格式的查询参数,可以使用 RawQuery 函数。你也可以将查询参数解析为一个map。已解析的查询参数 map 以查询字符串为键,对应值字符串切片为值,所以如何只想得到一个键对应的第一个值,将索引位置设置为 [0] 就行了。
    fmt.Println(u.RawQuery)
    m, _ := url.ParseQuery(u.RawQuery)
    fmt.Println(m)
    fmt.Println(m["k"][0])
}
//运行我们的 URL 解析程序,显示全部我们提取的 URL 的不同数据块。
$ go run url-parsing.go 
postgres
user:pass
user
pass
host.com:5432
host.com
5432
/path
f
k=v
map[k:[v]]
v

第二个url.Parse示例

func time_GET(w http.ResponseWriter, r *http.Request) {
    u, _ := url.Parse(r.URL.String())
    values, _ := url.ParseQuery(u.RawQuery)
    fmt.Println(u)           // /time?a=111&b=1212424
    fmt.Println(u.RawQuery)  // a=111&b=1212424
    fmt.Println(values)      // map[a:[111] b:[1212424]]
    fmt.Println(values["a"]) //[111]
    fmt.Println(values["b"]) //[1212424]
    ...
}

...

 输入URL:
 http://localhost:8080/time?aaa=111&b=1212424

 程序输出:
/time?a=111&b=1212424
a=111&b=1212424
map[a:[111] b:[1212424]]
[111]
[1212424]

OpenSSL 生成 SM2 密钥

openssl ecparam -name SM2 -genkey -out sm2_ec.key 
cat sm2_ec.key 
-----BEGIN EC PARAMETERS-----
BggqgRzPVQGCLQ==
-----END EC PARAMETERS-----
-----BEGIN EC PRIVATE KEY-----
MHcCAQEEIB9dGHE5+6AD9DGmA8g/cEqn8HYTMBhbM+g2XJ16RqZ1oAoGCCqBHM9V
AYItoUQDQgAEJg19rra1BeuYx9ZU1GbfD0ceE9X67/c2hdb6XZLQor5oNVa+o9HZ
WBioc1hNCC2avO1Dpg5ZAb2YsS71TT7Bsw==
-----END EC PRIVATE KEY-----

OpenSSL 根据SM2私钥生成公钥

openssl ec -in sm2_ec.key -pubout -out sm2_ec.pubkey 
read EC key
writing EC key
cat sm2_ec.pubkey 
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEJg19rra1BeuYx9ZU1GbfD0ceE9X6
7/c2hdb6XZLQor5oNVa+o9HZWBioc1hNCC2avO1Dpg5ZAb2YsS71TT7Bsw==
-----END PUBLIC KEY-----

OpenSSL SM3 计算文件Hash

echo "https://const.net.cn" > sign.data 
openssl dgst -SM3 sign.data 
SM3(sign.data)= 8c13610aeb3040b2899ac224ae7db0710030803c424f776e7241340c66a6d553

OpenSSL 使用 SM2 签名文件

openssl dgst -SM3 -sign sm2_ec.key -out sm2_ec.sig sign.data 
Error setting context
140524048778560:error:100C508A:elliptic curve routines:pkey_ec_ctrl:invalid digest type:../crypto/ec/ec_pmeth.c:331:

在当前版本(OpenSSL 1.1.1f)还不支持命令行使用SM2结合SM3签名。将hash算法换成sha256试试。
OpenSSL 使用 SM2 结合 sha256签名

openssl dgst -sha256 -sign sm2_ec.key -out sm2_ec.sig sign.data 
root@hesy-ThinkPad-P15v-Gen-1:/home/hesy/2021/asn1/src/sm# hexdump -C sm2_ec.sig 
00000000  30 46 02 21 00 d7 52 c2  63 a3 12 ff ef af 69 8e  |0F.!..R.c.....i.|
00000010  8a 35 17 9f f2 0c e2 b1  80 fb dd a1 38 a3 59 14  |.5..........8.Y.|
00000020  5a 18 33 ba 43 02 21 00  9d 10 91 a7 5f a4 cf bb  |Z.3.C.!....._...|
00000030  7b 75 c0 27 17 d5 2d 55  09 cc 10 49 29 f8 bc 0d  |{u.'..-U...I)...|
00000040  10 d6 02 db b1 e4 7c 7a                           |......|z|
00000048

OpenSSL 使用 SM2 结合 sha256 验签

openssl dgst -sha256 -verify sm2_ec.pubkey -signature sm2_ec.sig sign.data 
Verified OK

OpenSSL 使用 SM2 结合 SM3 验签

openssl dgst -SM3 -verify sm2_ec.pubkey -signature sm2_ec.sig sign.data 
Error setting context
140471948707136:error:100C508A:elliptic curve routines:pkey_ec_ctrl:invalid digest type:../crypto/ec/ec_pmeth.c:331:

同上面一样的原因,官方没实现,命令行用不了。

《基于LTE的车联网无线通信技术 安全证书管理系统技术要求》 SM2 验证过程

已知数据
签名证书对应的SM2私钥:

17 9e 18 ae e3 38 72 e1 60 5e 99 e8 bc 61 20 f7 
95 e7 c8 f8 a9 ce 60 7a 4a 71 78 68 23 53 a1 69

签名证书SM3哈希值:

e3 8c 7c b2 ec ed b9 28 9b 6e 71 ad 30 b6 26 2c 
4a 57 85 73 b9 a4 4d e8 ab 65 9a 6b cd 96 7d 77

ToBeSignedData待签名数据值:

40 03 80 20 34 34 34 34 34 34 34 34 34 34 34 34 
34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 
34 34 34 34 40 01 20 00 00 00 00 00 23 73 03 

过程数据
签名证书对应的公钥:

X:
1e 5f 89 a5 74 08 2c 8b 36 11 fb a8 d0 65 f3 08 
b4 8f 64 ee ef 71 30 3c 75 ba 8e 95 d5 be 89 42 
Y:
77 84 ef 22 09 41 de eb cf 5b 3e 34 65 98 0a 30 
91 67 34 6f fe 05 0a e1 00 7c 2d 2f 3f 10 57 74

ZA值:

ff 25 43 65 9c 0b 93 c3 9f e3 b4 00 73 98 df 9f 
b4 0c f4 5d e3 65 e7 c9 af 16 5d 42 68 35 0b b9 

Hash (ZA || Data input) 值:

7a b1 2a 19 b6 45 df c6 36 e2 0e a7 ae b0 e5 5e 
f3 f3 68 38 87 b2 e0 76 a8 eb 32 94 90 4e e5 d4

签名结果数据

R:
DD F9 07 5D D2 D9 47 05 A1 2F 42 5E 51 CB 27 4C 
B8 F4 AE 65 B3 1C 7C DD CD 31 C2 BC 3C 55 28 81
S:
20 86 11 DE 09 A7 CC 4E 48 76 E6 9E F2 E7 C0 6A 
85 39 A4 67 F2 0B 0E A7 FE EB 2A FE 9D 59 5C C4

附录
ZA值计算方法
SM2是一种椭圆曲线密码学算法, SM2只与单个特定的256位椭圆曲线相关联,因此在本标准中与SM2相关联的标识符不需要额外的曲线指示。
本标准中SM2的签名格式r用整数表示。SM2通过将身份字符串添加到要散列的消息前来命名散列函数, 这个身份字符串是:
𝑍𝐴 = 𝐻ASH(𝐸𝑁𝑇𝐿𝐴||𝐼𝐷𝐴||𝑎||𝑏||𝑥𝐺| |𝑦𝐺 ||𝑥𝐴||𝑦𝐴)
其中

1) ENTLA 是由IDA长度转换而成的两个字节字符,值为IDA的有效比特数;
2) IDA 是发送方的ID;
3) a 和b是SM2椭圆曲线的方程参数;
4) xG和yG 是SM2基点的 x和y坐标;
5) xA和yA是验签公钥的x和y坐标;

数字签名用H(ZA || Data input)计算,而不是只用M计算,此处的Data input为待签名的消息数据。
本标准约定IDA为发送方正在使用证书的32字节哈希值,也即IDA=HashedId32(Certificate)并按GB/T 32918进行比特串到字节串的转换,ENTLA 是0x0100。当签发的证书为自签名证书时,IDA为16进制整数31323334353637383132333435363738,并按GB/T 32918进行整数到字节串的转换,因此ENTLA 是0x0080。

2021年动作《速度与激情9》BD中英双字迅雷下载_电影天堂
update:2021-8-4

magnet:?xt=urn:btih:155970bfc960f57cce7033f4c52181da2a5744cb

magnet:?xt=urn:btih:ca6c26a08122deca8319bc5f8b88a057e18337fa 速度与激情9-2021_HD中英双字V2.mp4.torrent magnet:?xt=urn:btih:2c8438b63cc34b8d840220be5e8a9974753b6c2f 速度与激情9-2021_HD中英双字精译.mp4.torrent
Referenced from:https://www.btdx8.com/torrent/sdyjq9_2021.html

速度与激情9 迅雷网盘 密码: kmzw(打开链接密码自动复制)
Referenced from:https://www.bd2020.com/zx/33147.htm

◎译  名 速度与激情9/F9狂野时速(港)/Fast & Furious 9/FF9/狂野时速9/玩命关头9(台)/速激9
◎片  名 F9: The Fast Saga
◎年  代 2021
◎产  地 美国,泰国,加拿大
◎类  别 动作/犯罪
◎语  言 英语
◎字  幕 中英双字
◎上映日期 2021-05-19(韩国) / 2021-05-21(中国大陆) / 2021-06-25(美国)
◎IMDb评分  5.4/10 from 44700 users
◎豆瓣评分 5.4/10 from 131770 users
◎片  长 142分钟
◎导  演 林诣彬 Justin Lin
◎编  剧 丹·凯西 Daniel Casey
       盖瑞·斯科特·汤普森 Gary Scott Thompson
       克里斯·摩根 Chris Morgan
◎主  演 范·迪塞尔 Vin Diesel
       约翰·塞纳 John Cena
       米歇尔·罗德里格兹 Michelle Rodriguez
       乔丹娜·布鲁斯特 Jordana Brewster
       泰瑞斯·吉布森 Tyrese Gibson
       卢达·克里斯 Ludacris
       查理兹·塞隆 Charlize Theron
       海伦·米伦 Helen Mirren
       姜成镐 Sung Kang
       娜塔莉·伊曼纽尔 Nathalie Emmanuel
       迈克尔·鲁克 Michael Rooker
       卢卡斯·布莱克 Lucas Black
       杜俊纬 Jason Tobin
       卡迪·B Cardi B
       吉姆·帕拉克 Jim Parrack
       芬恩·科尔 Finn Cole
       安珀·西耶娜 Amber Sienna
       马丁·福特 Martyn Ford
       艾拉·沃克 Ella Walker
       泽井杏奈 Anna Sawai
       图厄·埃尔斯特德·拉斯姆森 Thue Ersted Rasmussen
       米拉吉·格尔比克 Miraj Grbic
       吉米·斯达 Jimmy Star
       莱克斯·艾尔 Lex Elle
       温尼·贝内特 Vinnie Bennett
       马克·克雷尼克 Mark Krenik
       杰森·斯坦森 Jason Statham

◎标  签 动作 | 飙车 | 美国 | 犯罪 | 跑车 | 2021 | 科幻 | 赛车

◎简  介

  “唐老大”多姆·托莱多(范·迪塞尔 饰)与莱蒂(米歇尔·罗德里格兹 饰)和他的儿子小布莱恩,过上了远离纷扰的平静生活。然而他们也知道,安宁之下总潜藏着危机。这一次,为了保护他所爱的人,唐老大不得不直面过去。他和伙伴们面临的是一场足以引起世界动荡的阴谋,以及一个前所未遇的一流杀手和高能车手。而这个名叫雅各布(约翰·塞纳 饰)的人,恰巧是多姆遗落在外的亲弟弟。

◎获奖情况

  第7届豆瓣电影年度榜单 (2020)
  最值得期待的外语电影(提名)
  
  第6届豆瓣电影年度榜单 (2019)
  最值得期待的外语电影(提名)
Referenced from:https://www.dytt8.net/html/gndy/dyzz/20210801/61692.html

make[1]: 进入目录“/usr/src/linux-headers-5.4.0-89-generic”
HOSTCC scripts/basic/fixdep
HOSTCC scripts/kconfig/conf.o
HOSTCC scripts/kconfig/confdata.o
HOSTCC scripts/kconfig/expr.o
LEX scripts/kconfig/lexer.lex.c
YACC scripts/kconfig/parser.tab.[ch]
HOSTCC scripts/kconfig/lexer.lex.o
HOSTCC scripts/kconfig/parser.tab.o
HOSTCC scripts/kconfig/preprocess.o
HOSTCC scripts/kconfig/symbol.o
HOSTLD scripts/kconfig/conf
scripts/kconfig/conf --syncconfig Kconfig
make[2]: * 没有规则可制作目标“arch/x86/tools/relocs_32.c”,由“arch/x86/tools/relocs_32.o” 需求。 停止。
make[1]: * [arch/x86/Makefile:236:archscripts] 错误 2
make[1]: 离开目录“/usr/src/linux-headers-5.4.0-89-generic”
make: * [Makefile:5:all] 错误 2

解决办法:

In the make file, just change SUBDIRS=$(PWD) into M=$(shell pwd)

视频编解码分为硬件加速以及非硬件加速。硬件加速是指通过显卡,FPGA等硬件进行视频编解码,由于硬件有专门优化,所以性能高,能耗低,非硬件加速编解码是指通过CPU进行视频编解码,性能就没那么高(虽然有相关CPU指令优化),由于视频编解码计算量很大,所以能耗也很高。在PC平台上主流的硬件加速编解码有Intel集成显卡,Nvidia显卡。

Quick Sync Video
Intel Quick Sync Video(QSV)是Intel GPU上跟视频处理有关的一系列硬件特性的称呼。

英特尔® Quick Sync Video 技术可以快速转换便携式多媒体播放器的视频,还能提供在线共享、视频编辑及视频制作功能。

看到CPU带的集成显卡支持Quick Sync Video就表示支持硬件加速的视频编解码。

比如查看Intel J1900是否支持QSV.如下
https://ark.intel.com/content/www/cn/zh/ark/products/78867/intel-celeron-processor-j1900-2m-cache-up-to-2-42-ghz.html

在不同平台上可通过不同API使用Intel GPU的硬件加速能力。目前主要由两套API:VAAPI以及libmfx。

VAAPI (视频加速API,Video Acceleration API)包含一套开源的库(LibVA) 以及API规范, 用于硬件加速下的视频编解码以及处理,只有Linux上的驱动提供支持。
libmfx。Intel Media SDK中的API规范,支持视频编解码以及媒体处理。支持Windows以及Linux。

所以,回到标题所在的问题,就知道了vaapi应该只是qsv的一种包含关系。

VAAPI驱动
VAAPI驱动属于用户态驱动,用于支持LibVA,底层是i965/1915驱动。Intel提供了两种开源的VAAPI驱动:intel-vaapi-driver以及intel-media-driver,intel-media-driver较intel-vaapi-driver新,维护更积极,所以目前更推荐使用intel-media-driver。

FFmpeg VAAPI/QSV开发环境搭建
对于VAAPI以及Intel Media SDK,如果使用原生API开发的话比较麻烦,好在FFmpeg提供了对应的插件。我们可以通过FFmpeg间接使用这两套API。在FFmpeg中VAAPI还是叫做VAAPI,但是Intel Media SDK却叫做QSV(一脸懵逼)。

FFmpeg-vaapi插件:基于VAAPI接口
FFmpeg-qsv插件:基于Intel Media SDK

FFmpeg VAAPI/QSV开发环境搭建我就不做搬运工了,大家可参考官网教程。

Linux FFmpeg VAAPI/QSV Installation Environment:https://01.org/linuxmedia/quickstart/ffmpeg-vaapi-qsv-installation-environment

查看支持的编解码功能
apt install vainfo

vainfo
libva info: VA-API version 1.7.0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_7
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.7 (libva 2.6.0)
vainfo: Driver version: Intel iHD driver for Intel(R) Gen Graphics - 20.1.1 ()
vainfo: Supported profile and entrypoints

  VAProfileMPEG2Simple            :    VAEntrypointVLD
  VAProfileMPEG2Main              :    VAEntrypointVLD
  VAProfileH264Main               :    VAEntrypointVLD
  VAProfileH264Main               :    VAEntrypointEncSliceLP
  VAProfileH264High               :    VAEntrypointVLD
  VAProfileH264High               :    VAEntrypointEncSliceLP
  VAProfileJPEGBaseline           :    VAEntrypointVLD
  VAProfileJPEGBaseline           :    VAEntrypointEncPicture
  VAProfileH264ConstrainedBaseline:    VAEntrypointVLD
  VAProfileH264ConstrainedBaseline:    VAEntrypointEncSliceLP
  VAProfileVP8Version0_3          :    VAEntrypointVLD
  VAProfileHEVCMain               :    VAEntrypointVLD
  VAProfileHEVCMain10             :    VAEntrypointVLD
  VAProfileVP9Profile0            :    VAEntrypointVLD
  VAProfileVP9Profile2            :    VAEntrypointVLD

VAEntrypointVLD 指的是显卡能够解码这个格式,VAEntrypointEncSlice 指的是显卡可以编码这个格式。

form:https://blog.jianchihu.net/intel-gpu-hw-video-codec-develop.html

使用mqtts的时候,连接提示错误:

mosquitto_sub -L mqtts://124.71.233.xx:8883/ -t "command///req/#" --cert cert.pem --key key.pem --cafile ../trusted-certs.pem -q 1

Unable to connect (A TLS error occurred.).

加上调试信息打印

mosquitto_sub -L mqtts://124.71.233.xx:8883/ -t "command///req/#" --cert cert.pem --key key.pem --cafile ../trusted-certs.pem -q 1 -d

Error: Unable to load client certificate "cert.pem".
OpenSSL Error[0]: error:140AB18E:SSL routines:SSL_CTX_use_certificate:ca md too weak
Unable to connect (A TLS error occurred.).

查看openssl软件版本
openssl
OpenSSL> version
OpenSSL 1.1.1f 31 Mar 2020
OpenSSL> quit

使用openssl s_client 测试

openssl s_client -connect 124.71.233.xx:8883 -cert cert.pem -key key.pem -CAfile ../trusted-certs.pem -showcerts

error setting certificate
140341384697152:error:140AB18E:SSL routines:SSL_CTX_use_certificate:ca md too weak:../ssl/ssl_rsa.c:310:
出现同样的错误。

查看证书信息

openssl x509 -text -in cert.pem

Signature Algorithm: sha1WithRSAEncryption

众所周知,sha1算法很弱且已过时。应该就是这个原因了。
解决办法:

openssl s_client -cipher @SECLEVEL=0:ALL -connect 124.71.233.xx:8883 -cert cert.pem -key key.pem -CAfile ../trusted-certs.pem -showcerts

要确认就是sha1的问题,只需要这样就可以

openssl s_client -cipher @SECLEVEL=0:SHA1 -connect 124.71.233.62:8883 -cert cert.pem -key key.pem -CAfile ../trusted-certs.pem -showcerts

mqtt在编译openssl的时候,使用DOPENSSL_TLS_SECURITY_LEVEL=0就可以了。

还有一个修改配置文件的方法,
修改/etc/ssl/openssl.cnf文件
在文件开头加上

openssl_conf = default_conf

在文件结尾加上

[ default_conf ]

ssl_conf = ssl_sect

[ssl_sect]

system_default = ssl_default_sect

[ssl_default_sect]
MinProtocol = TLSv1.2
CipherString = DEFAULT:@SECLEVEL=0

验证测试:

openssl s_client  -connect 124.71.233.62:8883 -cert cert.pem -key key.pem -CAfile ../trusted-certs.pem -showcerts

CONNECTED(00000003)
...
verify return:1
这个方法来源于:https://askubuntu.com/questions/1231799/certificate-error-after-upgrade-to-20-04
原文:

I found a solution, according to the accepted answer of this question:
Ubuntu 20.04 - how to set lower SSL security level?

In particular, the openSSL configuration file /etc/ssl/openssl.cnf
shall be modified in the following way.

At the beginning, add openssl_conf = default_conf

At the end, add

[ default_conf ]

ssl_conf = ssl_sect

[ssl_sect]

system_default = ssl_default_sect

[ssl_default_sect] MinProtocol = TLSv1.2 CipherString =
DEFAULT:@SECLEVEL=0 After this modification, the certificate is
recognized without security errors.

https://www.openssl.org/docs/man1.1.0/man3/SSL_CTX_set_security_level.html

WARNING at this time setting the security level higher than 1 for
general internet use is likely to cause considerable interoperability
issues and is not recommended. This is because the SHA1 algorithm is
very widely used in certificates and will be rejected at levels higher
than 1 because it only offers 80 bits of security.

The default security level can be configured when OpenSSL is compiled
by setting -DOPENSSL_TLS_SECURITY_LEVEL=level. If not set then 1 is
used.

https://github.com/drwetter/testssl.sh/issues/1433

OpenSSL 1.1.0 introduced the ability to specify a security level:
https://github.com/openssl/openssl/blob/master/doc/man3/SSL_CTX_set_security_level.pod.
By default the security level is set to 1 unless a compile-time option
is used to set the default a different value. The security level may
also be set by the command line, e.g.,

openssl s_client -cipher @SECLEVEL=0:ALL -connect 127.0.0.1:443 At the
moment, testssl.sh does not use the @SECLEVEL=n directive, but we may
want to look into using s_client_options() to add it in some
circumstances.

Ubuntu 20使用rc-local时,出现这个错误提示。
The unit files have no [Install] section. They are not meant to be enabled using systemctl.

解决办法:
rc-local.service添加Install字段。

[Install]
WantedBy=multi-user.target

结果:

cat /lib/systemd/system/rc-local.service
[Unit]
Description=/etc/rc.local Compatibility
Documentation=man:systemd-rc-local-generator(8)
ConditionFileIsExecutable=/etc/rc.local
After=network.target

[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
RemainAfterExit=yes
GuessMainPID=no

[Install]
WantedBy=multi-user.target

重新enable
systemctl enable rc-local.service

创建/etc/rc.local,并赋予执行权限

cat /etc/rc.local
#!/bin/sh
echo "ok" >> ~/rc.local.ok
exit 0

安装 vcpkg
从 GitHub 存储库下载 vcpkg:

wget -O vcpkg.tar.gz https://github.com/microsoft/vcpkg/archive/master.tar.gz

创建一个新目录来存储 vcpkg 并将tar.gz文件解压缩到其中:

sudo mkdir /opt/vcpkg
sudo tar xf vcpkg.tar.gz --strip-components=1 -C /opt/vcpkg

运行以下命令来构建 vcpkg 本身:

sudo /opt/vcpkg/bootstrap-vcpkg.sh

在/usr/local/bin目录中,我们可以创建一个指向vcpkg命令的符号链接:

sudo ln -s /opt/vcpkg/vcpkg /usr/local/bin/vcpkg

现在vcpkg可以用作所有用户的系统范围命令。我们可以使用以下命令检查 vcpkg 版本:

vcpkg version

tar.gz不再需要该文件,将其删除:

rm -rf vcpkg.tar.gz

测试 vcpkg
我们可以使用vcpkg install命令来构建和安装库。例如,以下命令安装 zlib 库:

sudo vcpkg install zlib:x64-linux

运行以下命令以获取已安装库的列表:

sudo vcpkg list

卸载 vcpkg
如果想彻底删除vcpkg,删除安装目录:

sudo rm -rf /opt/vcpkg

删除符号链接:

sudo rm -rf /usr/local/bin/vcpkg

您还可以删除 vcpkg 缓存和相关目录:

sudo rm -rf /root/.cache/vcpkg
sudo rm -rf /root/.vcpkg
rm -rf ~/.vcpkg