0

当我发出以下命令时:

cn[(sizeof cn) - 1] = 0;
if (X509_NAME_get_text_by_NID(subj_p, NID_commonName,
                              cn, (sizeof cn) - 1) <= 0) {
    fprintf(stderr, "Subject has no CN\n");
    return -1;
}
if (strncasecmp(cn, options.server_p, sizeof cn) != 0) {
    fprintf(stderr, "Subject CN mismatch (%s != %s)\n",
            options.server_p, cn);
    return -1;
}

options.server_p在哪里a1.accessmylan.com

我收到以下错误:

Subject CN mismatch (b1.accessmylan.com != BONE.ACCESSMYLAN.COM)

如果我尝试使用不同的服务器,我会得到:

Subject CN mismatch (a1.accessmylan.com != aone.ACCESSMYLAN.COM)

有谁知道为什么会发生这种情况和/或如何解决它?谢谢!

4

1 回答 1

0

正如您所显示的错误,两个通用名称确实不同。它们在任何意义上都不相同。

据我所知,常用名称b1.accessmylan.comBONE.ACCESSMYLAN.COM在现实中是不同的。

请检查您的证书及其通用名称和输入。

在您的代码中

cn[(sizeof cn) - 1] = 0;

您正在使用 sizeof 来计算 cn 的元素数。sizeof 运算符给出字节数,而不是元素数。

执行此操作的正确方法(如果 cn 在范围内声明为静态数组)

cn[sizeof(cn)/sizeof(cn[0]) - 1] = 0;

这可能是问题之一,但不一定是这个问题。

另一件事是,在您的代码中,在 strcasecmp 中,您传递的是 cn 的大小。作为一种好的做法,您应该传递 cn 或 options.server_p 的长度,以较小者为准。

于 2013-09-21T06:27:29.967 回答