利用 boost::asio::ssl C/C++ 检查SSL/PEM证书文件的有效性

我们可以通过 boost::asio::ssl::context (SSL上下文)对象实例成员接口来检查SSL证书文件的有效性。

1、use_certificate_chain_file 使用证书链文件(CA*)

2、use_certificate_file 使用证书文件(公钥)

3、use_private_key_file 使用证书文件(私钥)

cpp 复制代码
        bool SSL::VerifySslCertificate(
            const std::string& certificate_file,
            const std::string& certificate_key_file,
            const std::string& certificate_chain_file) noexcept {

            typedef xxx::io::File                       File;
            typedef xxx::io::FileAccess                 FileAccess;

            if (certificate_file.empty() ||
                certificate_key_file.empty() ||
                certificate_chain_file.empty()) {
                return false;
            }

            if (!File::CanAccess(certificate_file.data(), FileAccess::Read) ||
                !File::CanAccess(certificate_key_file.data(), FileAccess::Read) ||
                !File::CanAccess(certificate_chain_file.data(), FileAccess::Read)) {
                return false;
            }

            std::shared_ptr<boost::asio::ssl::context> ssl_context = make_shared_object<boost::asio::ssl::context>(
                xxx::ssl::SSL::SSL_S_METHOD(xxx::ssl::SSL::SSL_METHOD::ssl));
            if (!ssl_context) {
                return false;
            }

            boost::system::error_code ec;
            /*ssl_context_->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);*/
            ssl_context->use_certificate_chain_file(certificate_chain_file, ec);
            if (ec) {
                return false;
            }

            ssl_context->use_certificate_file(certificate_file, boost::asio::ssl::context::file_format::pem, ec);
            if (ec) {
                return false;
            }

            ssl_context->use_private_key_file(certificate_key_file, boost::asio::ssl::context::file_format::pem, ec);
            return ec ? false : true;
        }

        boost::asio::ssl::context::method SSL::SSL_S_METHOD(int method) noexcept {
            switch (method) {
            case SSL_METHOD::tlsv13:
                return boost::asio::ssl::context::tlsv13_server;
            case SSL_METHOD::tlsv12:
                return boost::asio::ssl::context::tlsv12_server;
            case SSL_METHOD::tlsv11:
                return boost::asio::ssl::context::tlsv11_server;
            case SSL_METHOD::tls:
                return boost::asio::ssl::context::tls_server;
            case SSL_METHOD::sslv23:
                return boost::asio::ssl::context::sslv23_server;
            case SSL_METHOD::sslv3:
                return boost::asio::ssl::context::sslv3_server;
            case SSL_METHOD::sslv2:
                return boost::asio::ssl::context::sslv2_server;
            default:
                return boost::asio::ssl::context::tlsv12_server;
            };
        }
相关推荐
上海合宙LuatOS37 分钟前
LuatOS核心库API——【audio 】
java·网络·单片机·嵌入式硬件·物联网·音视频·硬件工程
深圳市恒星物联科技有限公司2 小时前
水质流量监测仪:复合指标监测的管网智能感知设备
大数据·网络·人工智能
三水不滴2 小时前
有 HTTP 了为什么还要有 RPC?
经验分享·笔记·网络协议·计算机网络·http·rpc
科技块儿3 小时前
2026年我会推荐哪些IP归属地查询网站?
网络·ip地址·ip归属地·运维工具·网络工具·实用网站·2026工具推荐
米羊1213 小时前
已有安全措施确认(中)
网络
迎仔4 小时前
A-算力中心网络隔离总览:数字世界的“酒店房间“
网络
宝塔面板4 小时前
AllinSSL 一站式搞定 SSL 自动续期:永久免费,开源可自托管
网络·网络协议·ssl
csdn今天倒闭了吗4 小时前
飞牛lucky配置ipv6 ddns+ssl+反向代理
网络·网络协议·ssl
艾斯我来找你啦4 小时前
2026更新!OpenSSL 3.x版本的详细下载教程,纯小白友好!(内附介绍应用)
ssl
JavinLu4 小时前
ios 配置了代理且使用 chls.pro/ssl 下载不了证书,无法弹出下载证书的提示问题
网络协议·ios·ssl