小编Chi*_*sai的帖子

如何使用boost :: asio SSL验证客户端证书?

下面是SSL上下文初始化和验证回调注册的代码片段.如果我使用适当的证书连接SSL客户端,它将验证证书并按预期工作.

但是,如果我连接没有任何证书的客户端,那么它允许连接(实际上它不应该允许没有证书的连接).如果SSL客户端不发送证书,则它不会调用验证回调.

    boost::asio::ssl::context_base::method SSL_version =
            static_cast<boost::asio::ssl::context_base::method>(param_values[ID_PROTOCOL_VERSION].int32_value);

    // load certificate files
    boost::shared_ptr<boost::asio::ssl::context> context_ = boost::shared_ptr<boost::asio::ssl::context>(
            new boost::asio::ssl::context(SSL_version)); // parasoft-suppress BD-RES-LEAKS "The memory is allocated via boost::shared_ptr, hence it'll be deallocated automatically"

    p_ctx = boost::static_pointer_cast<void>(context_);

    context_->set_options(boost::asio::ssl::context::default_workarounds);

    context_->use_certificate_chain_file(cert_chain_file);
    context_->use_certificate_file(cert_file, boost::asio::ssl::context::pem);
    context_->use_private_key_file(cert_file, boost::asio::ssl::context::pem);

    context_->set_verify_mode(boost::asio::ssl::verify_peer);
    context_->set_verify_callback(boost::bind(&verify_certificate_cb, _1, _2));
Run Code Online (Sandbox Code Playgroud)

verify_certificate_cb 回调函数

bool verify_certificate_cb(bool preverified, boost::asio::ssl::verify_context& ctx)
{
    std::cout << "Function : " << __func__ << " ----------------- Line : " << __LINE__ << std::endl;
    int8_t subject_name[256];
    X509_STORE_CTX *cts = ctx.native_handle();
    int32_t length = 0;
    X509* cert …
Run Code Online (Sandbox Code Playgroud)

c++ ssl boost boost-asio

14
推荐指数
1
解决办法
7541
查看次数

boost asio服务器在调用时挂起来关闭boost :: socket

下面是我使用boost asio的套接字服务器的示例代码.

此服务器将在端口10001上等待任何客户端连接.当任何客户端连接时,它将启动线程从该客户端读取并等待另一个客户端.但是,当我的客户端断开服务器套接字时,会发生什么情况my_socket->close().

如果新客户端尝试连接服务器崩溃.

我正在使用 g ++(Ubuntu 4.4.3-4ubuntu5.1)4.4.3

#include <ctime>
#include <iostream>
#include <string>
#include <boost/asio.hpp>
#include <sys/socket.h>
#include <unistd.h>
#include <string>
#include <boost/bind.hpp>
#include <boost/thread.hpp>
#include <boost/date_time.hpp>

using namespace std;
using boost::asio::ip::tcp;

void run(boost::shared_ptr<tcp::socket> my_socket)
{
    while (1)
    {
        char buf[128];
        boost::system::error_code error;

        size_t len = my_socket->read_some(boost::asio::buffer(buf, 128), error);
        std::cout << "len : " << len << std::endl;

        if (error == boost::asio::error::eof)
        {
            cout << "\t(boost::asio::error::eof)" << endl;
            if (my_socket->is_open())
            {
                boost::system::error_code ec;
                cout << "\tSocket closing" …
Run Code Online (Sandbox Code Playgroud)

c++ sockets boost boost-asio

6
推荐指数
1
解决办法
1777
查看次数

在c++中实现多个接口

我的接口层次结构如下:

class A
{
public:
 void foo() = 0;
};

class B: public A
{
public:
void testB() = 0;
};

class C: public A
{
public:
void testC() = 0;
};
Run Code Online (Sandbox Code Playgroud)

现在,我想通过相同的层次结构(即基类)实现这些接口AImplBImplCImpl我不确定如何从相应的接口派生它们。

请帮忙。提前致谢。

c++ oop

2
推荐指数
2
解决办法
9356
查看次数

C发送套接字而不定义套接字

这行代码做了什么

send(4, "test\n", 15, 0);
Run Code Online (Sandbox Code Playgroud)

如果代码中没有定义套接字?

c sockets linux

0
推荐指数
1
解决办法
79
查看次数

标签 统计

c++ ×3

boost ×2

boost-asio ×2

sockets ×2

c ×1

linux ×1

oop ×1

ssl ×1