首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用SSL支持连接到RabbitMq-c

无法使用SSL支持连接到RabbitMq-c
EN

Stack Overflow用户
提问于 2013-03-14 16:44:42
回答 2查看 1.9K关注 0票数 0

我正在尝试使用命令行在rabbitmq-c library ( SSL管道分支)中运行ssl示例"amqps_listenq“

代码语言:javascript
复制
$./amqps_listenq [ServerIP]  5671 hello ./cacert.pem ./key.pem ./cert.pem

我得到了以下错误

代码语言:javascript
复制
opening SSL/TLS connection

当我尝试调试代码时,main中的以下代码块失败了

代码语言:javascript
复制
status = amqp_socket_open(socket, hostname, port);
if (status) {
    die("opening SSL/TLS connection");
}

当我调试到"amqp_socket_open“方法时,我发现在amqp_openssl.c中的以下代码块中它失败了

代码语言:javascript
复制
if (self->verify) {
    int status = amqp_ssl_socket_verify(self, host);
    if (status) {
        return -1;
    }
}

我跟踪了amqp_ssl_socket_verify内部的错误,发现我在以下代码块中失败了

代码语言:javascript
复制
#ifdef _MSC_VER
#define strcasecmp _stricmp
#endif
    if (strcasecmp(host, (char *)utf8_value)) {
        goto error; //<-- it fails here
    }
#ifdef _MSC_VER
#undef strcasecmp
#endif
exit:
    OPENSSL_free(utf8_value);
    return status;
error:
    status = -1;
    goto exit;

状态等于-1 \f25-1\f6问题出在哪里??

请注意,即使我没有使用以下代码设置证书,我也可以使用java轻松地连接到同一台服务器上使用SSL的RabbitMq

代码语言:javascript
复制
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("[ServerIP]");
factory.setPort(5671);
factory.useSslProtocol();
factory.setUsername("guest");
factory.setPassword("guest");
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();

channel.queueDeclare("hello_ssl", false, false, false, null);
System.out.println(" [*] Waiting for messages. To exit press CTRL+C");

QueueingConsumer consumer = new QueueingConsumer(channel);
channel.basicConsume(QUEUE_NAME, true, consumer);

while (true){
  QueueingConsumer.Delivery delivery = consumer.nextDelivery();
  String message = new String(delivery.getBody());
  System.out.println(" [" + i + "] Received '" + message + "'");
}
EN

回答 2

Stack Overflow用户

发布于 2013-04-26 05:31:33

我一直在调试librabbitmq,我看到了完全相同的行为。utf8_value变量包含" amqp“,而host变量包含amqp服务器主机名。

我有一个解决办法:

代码语言:javascript
复制
-  if (strcasecmp(host, (char *)utf8_value)) {
-    goto error;
+
+  if(strcasecmp((char *)utf8_value, "amqp")) {
+    if (strcasecmp(host, (char *)utf8_value) ) {
+      goto error;
+    }
   }

我已经在这里进行了分支和修补:https://github.com/drainware/rabbitmq-c

票数 1
EN

Stack Overflow用户

发布于 2014-10-09 16:29:39

问题出在证书上,请验证证书详细信息中的域是否匹配。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15404613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档