一. wss 認證
關於SSL認證說明(轉載)
https://www.cnblogs.com/bluestorm/p/10571989.html
二.從瀏覽器生成wss客戶端
1.用谷歌打開網站
2.點擊"小鎖", 在證書路徑中所有的證書都需要生成*.pem。
3.導出證書
選擇第一級證書,點擊查看證書
>>詳細信息
>>複製到文件
>>下一步
>>選擇DER 編碼二進制X.509(.CER)
>>下一步
>>指定導出文件路徑文件名(可直接導出到openssl的bin目錄下),完成證書導出(文件後綴.cer)。
4.生成 .pem 文件
使用 openssl.exe 將證書文件轉爲.pem 文件,命令如下
openssl x509 -in xxx.cer -inform der -out xxx.pem
重複 2 3 4
步驟依次將各級證書,全部生成對應的.pem
文件。然後將各個.pem
文件的內容copy到同一個.pem
文件內(如client.pem)。
websocketpp/examples/print_client_tls/print_client_tls.cpp測試只生成一級目錄證書,即可連接成功
三.websocketpp的wss client demo
修改 websocketpp/examples/print_client_tls/print_client_tls.cpp內容
context_ptr on_tls_init(const char * hostname, websocketpp::connection_hdl) {
context_ptr ctx = websocketpp::lib::make_shared<boost::asio::ssl::context>(boost::asio::ssl::context::sslv23);
try {
ctx->set_options(boost::asio::ssl::context::default_workarounds |
boost::asio::ssl::context::no_sslv2 |
boost::asio::ssl::context::no_sslv3 |
boost::asio::ssl::context::single_dh_use);
// 注意此處:set_verify_mode
// 選擇 verify_peer 需要 load_verify_file
// 選擇 verify_none 不需要 load_verify_file
ctx->set_verify_mode(boost::asio::ssl::verify_peer);
ctx->set_verify_callback(bind(&Mverify_certificate, hostname, ::_1, ::_2));
// Here we load the CA certificates of all CA's that this client trusts.
ctx->load_verify_file("client.pem");
} catch (std::exception& e) {
std::cout << e.what() << std::endl;
}
return ctx;
}