4

現在、私はこれに取り組んでいます:

...
    ctx.use_certificate_chain_file("./C/cert.pem");
    ctx.use_private_key_file("./C/key.pem", boost::asio::ssl::context::pem);
    ctx.load_verify_file("./C/ca.pem");
...

これまでのところすべてが完璧に機能していますが、本当に必要なのは同じ key.pem をロードすることですが、パスフレーズを使用します私はPythonのような高級言語に精通しているので、c++は私の得意分野ではないことを覚えておいてください。

どんな助けでも大歓迎です、ありがとう!

4

1 に答える 1

5

Python からのコールバックに精通している必要があります。

最初にコールバック関数を定義します。

using namespace boost::asio;

// this function is called to obtain password info about an encrypted key
std::string my_password_callback(
    std::size_t max_length,  // the maximum length for a password
    ssl::context::password_purpose purpose ) // for_reading or for_writing
{
    std::string password; 
    // security warning: !! DO NOT hard-code the password here !!
    // read it from a SECURE location on your system
    return password;
}

次に、コールバックを次のように設定しますset_password_callback()

// set the callback before you load the protected key
ctx.set_password_callback(my_password_callback);
// ...
// this will call my_password_callback if a password is required
ctx.use_private_key_file("key.pem",ssl::context::pem);

クラスメソッドをコールバックとして使いたい場合は、

class server {
    std::string password_callback(); //NOTE: no parameters
    // ...
};

boost::bind()コールバックを設定するために使用できます。

#include <boost/bind.hpp>

void server::startup() {
    ctx_.set_password_callback(
        boost::bind(&server::password_callback,this) );
    // ...
}

いずれの場合も、おそらくパスワードが間違っていたか、ファイルが見つからなかったためにキーを復号化できなかった場合、boost::system::system_error例外 ( に基づく) がスローされます。std::exception

于 2012-12-21T08:53:12.600 に答える