我们可以通过 boost::asio::ssl::context (SSL上下文)对象实例成员接口来检查SSL证书文件的有效性。
1、use_certificate_chain_file 使用证书链文件(CA*)
2、use_certificate_file 使用证书文件(公钥)
3、use_private_key_file 使用证书文件(私钥)
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;};}