当我发出以下命令时:

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_pa1.accessmylan.com

我收到以下错误:

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


如果我尝试使用其他服务器,则会得到:

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


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

最佳答案

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

据我所知,通用名称b1.accessmylan.com和BONE.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中较小的一个。

07-24 09:46
查看更多