1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

RabbitMQ CライブラリでSSL接続する

Last updated at Posted at 2016-04-03

RabbitMQ CライブラリでSSL接続する。

Pythonだとパラメータ一発で設定できるところ、Cライブラリ https://github.com/alanxz/rabbitmq-c では、正しく手続きを踏まないと完結しないので、そこのところを書く。

ヘッダファイルを読み込む。

# include <amqp_ssl_socket.h>

SSLライブラリをイニシャライズする。プログラムの中で、SSLライブラリを呼び出す前に一度だけ実行すればよい。RabbitMQで使用する以外にSSLライブラリを使用していて、そちらで既にSSLライブラリを初期化している場合は、パラメータをfalseにすれば、重複して初期化プログラムを実行しない。

amqp_set_initialize_ssl_library (true);

socket生成は、通常の amqp_tcp_socket_new() のかわりに、amqp_ssl_socket_new() を使用する。

amqp_socket_t*  socket = amqp_ssl_socket_new (conn);

クライアント接続する際に、サーバ証明書のチェックを行うことを指定する。デフォルトは「チェックする」。

amqp_ssl_socket_set_verify (socket, true);

追記:amqp_ssl_socket_set_verify()でfalseをセットしても、サーバ証明書ファイルを指定しないと、amqp_socket_open()の時に、サーバ証明書の検証エラーが出ました。

その後、通常通りサーバに接続する。以降、SSL上でメッセージのやり取りが行われる。ホスト名指定は、サーバ証明書に書かれているホスト名でなければ、チェックではねられる。また、RabbitMQのguestユーザのデフォルト設定は、localhost接続のみに限られているので注意。

int  rc_sock = amqp_socket_open (socket, "amqp.server.name", 5671);

まとめると、以下のとおり。

ssl_client.cc
# include <amqp.h>
# include <amqp_tcp_socket.h>
# include <amqp_framing.h>
# include <amqp_ssl_socket.h>

int  main (int argc, char** argv) {
    amqp_set_initialize_ssl_library (true);
    amqp_connection_state_t  conn = amqp_new_connection ();
    amqp_socket_t*  socket = amqp_ssl_socket_new (conn);
    int  rc_ca = amqp_ssl_socket_set_cacert (socket, "/usr/local/share/certs/ca-root-nss.crt");
    amqp_ssl_socket_set_verify (socket, true);
    int  rc_sock = amqp_socket_open (socket, "amqp.server.name", 5671);
    if (rc_sock != AMQP_STATUS_OK) {
        fprintf (stderr, "connection failure.\n");
        exit (1);
    }
    amqp_rpc_reply_t  rc_login = amqp_login (conn, "/", AMQP_DEFAULT_MAX_CHANNELS, AMQP_DEFAULT_FRAME_SIZE, AMQP_DEFAULT_HEARTBEAT, AMQP_SASL_METHOD_PLAIN, "username", "userpassword");
        :
}
1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?