4

私のコードは主にboostsslサンプルクライアントに基づいていますが、完全に同期させましたが、boostのサンプルでも同じことができます。

server.pemをロードした後sslContext.load_verify_file("server.pem");

双方向ハンドシェイクのために、サーバーが検証するためにクライアントキーとcrtをロードしようとしています。

context_.use_private_key_file("client.key",boost::asio::ssl::context_base::file_format::pem); // also tried use_rsa_private_key_file
context_.use_certificate_file("client.crt",boost::asio::ssl::context_base::file_format::pem);

use_private_key_fileまたはuse_rsa_private_key_fileが呼び出されると、パスワードを入力するときにパスワードが要求され、プログラムが終了します。どうしてこれなの?-私のパスワードは正しいです私はそれをチェックしましたopenssl rsa -check -in client.key

コンストラクターは、ブーストの例に対する唯一の変更です。これは、通常のSSLハンドシェイクに使用する方法です。

    server(boost::asio::io_service& io_service, unsigned short port)
        : io_service_(io_service),
                acceptor_(io_service,
                boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), port)),
                context_(boost::asio::ssl::context::sslv23)
                {
                        context_.load_verify_file("server.pem");
                        start_accept();
                }

双方向ハンドシェイク用。

    server(boost::asio::io_service& io_service, unsigned short port)
        : io_service_(io_service),
                acceptor_(io_service,
                boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), port)),
                context_(boost::asio::ssl::context::sslv23)
                {

                        context_.load_verify_file("server.pem");
                        context_.use_private_key_file("client.key",boost::asio::ssl::context_base::file_format::pem); // also tried use_rsa_private_key_file
                        context_.use_certificate_file("client.crt",boost::asio::ssl::context_base::file_format::pem);
                        start_accept();
                }
4

1 に答える 1

4

これは、コンソールを使用してパスワードを入力するたびに失敗しました。ただし、コールバックを使用した場合は問題ありませんset_password_callback(boost::bind(&get_password, this));でした。

于 2013-01-21T16:30:30.970 に答える