C++ boost SSL使用

阅读量: searchstar 2020-04-25 00:29:25
Categories: Tags:

我使用的boost版本是1.62,所以下面的文档都是1.62的。如果想看其他版本的,把url中的1_62_0换成你想看的版本即可。

官方文档

官方提供的boost asio的例子

boost官方提供的echo serverclient例子

把它们保存到server.cpp和client.cpp中。

参考:https://blog.csdn.net/zhangzq86/article/details/80790810

编译

g++ -o server server.cpp -lssl -lcrypto -lboost_system
g++ -o client client.cpp -pthread -lssl -lcrypto -lboost_system

不要用-mt(可能没有开启多线程?https://stackoverflow.com/questions/4596492/usr-bin-ld-cannot-find-lboost-system-mt

可能出现的错误及解决方案

fatal error: openssl/conf.h: No such file or directory
sudo apt install -y libssl-dev
/usr/bin/ld: cannot find -lboost_system
sudo apt install -y libboost_system-dev

或者直接

sudo apt install libboost-all-dev

注意只安装libboost-dev是没有上面所说的库的。

生成证书

参考:
https://stackoverflow.com/questions/6452756/exception-running-boost-asio-ssl-example
https://blog.csdn.net/liuchunming033/article/details/48470575
https://blog.csdn.net/qq_37049781/article/details/84837342

生成ca证书

参考:
crt转pem
demoCA

# Generate CA private key 
openssl genrsa -out ca.key 2048 
# Generate CSR 
openssl req -new -key ca.key -out ca.csr
# Generate Self Signed certificate(CA 根证书)
openssl x509 -req -days 3650 -in ca.csr -signkey ca.key -out ca.crt
# 转成pem格式(ASCII形式)。
openssl x509 -in ca.crt -out ca.pem
# 由于我这里crt已经是ASCII格式了,所以可以直接cp ca.crt ca.pem

# 创建一个目录结构,以后用来给其他证书签名时要用到
mkdir demoCA
cd demoCA
mkdir newcerts
touch index.txt
echo -e '01\n' >> serial
cd ..

生成server证书

合并crt和key生成pem

# private key
openssl genrsa -out server.key 1024 
# generate csr
openssl req -new -key server.key -out server.csr
# generate certificate
openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -days 365
# 我这里生成的crt和key已经是文本形式了,所以直接cat
cat server.crt server.key > server.pem

运行

openssl dhparam -out dh2048.pem 2048
./server 5188
./client 127.0.0.1 5188

其中dh*.pem是用来临时装Diffie-Hellman密钥交换协议的参数的文件

成功

searchstar@searchstar-PC:~/Learn/socket/ssl/certificates/test$ ./client 127.0.0.1 5188
Verifying /C=CN/ST=Some-State/O=Internet Widgits Pty Ltd/CN=searchstar/emailAddress=632863986@qq.com
Verifying /C=CN/ST=Some-State/O=Internet Widgits Pty Ltd/CN=searchstar/emailAddress=632863986@qq.com
Enter message: test
Reply: test

boost::bind用法

https://blog.csdn.net/Felaim/article/details/81012297