【问题标题】:Trusted pfx cert not working with InternalsVisibleTo attribute受信任的 pfx 证书不适用于 InternalsVisibleTo 属性
【发布时间】:2016-05-04 06:40:49
【问题描述】:

我从 Comodo CA 获得了一个受信任的证书,但很难让它与 InternalsVisibleTo 属性一起使用。 我收到警告说程序集无效且无法解决。 我使用 X509Certificate.GetPublicKeyString() 检索了公钥并将其放入 assemblyinfo。

[assembly:System.Runtime.CompilerServices.InternalsVisibleTo("Assemblyname,PublicKey=MyPublicKey"]

到目前为止,我们使用了一个不受信任的证书,它可以正常工作。我注意到受信任证书 (.pfx) 的 PublicKey 长度为 540 个字符,而我们的不受信任 (.snk) 仅 320 个字符。

我的错误在哪里?

此外,我不能使用 projectsettings 来选择我的 .pfx 来对其进行签名。后期构建工作。使用 projectsettings 时,它告诉我它找不到证书和私钥。

【问题讨论】:

    标签: c# pfx internalsvisibleto


    【解决方案1】:

    如果不自己尝试做同样的事情,很难说出问题所在。可能X509Certificate.GetPublicKeyString() 返回的公钥格式不是InternalsVisibleTo 期望的格式。但是,您可以使用 sn(强名称工具),它专为使用强名称键而设计。

    它位于C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin(SDK\系统驱动器等的数量可能会有所不同,但你懂的)。

    首先使用此命令导出公钥(如果 pfx 受密码保护,将要求输入密码):

    sn -p YourComodoCert.pfx YourComodoCert.snk
    

    然后通过以下方式将公钥导出为字符串:

    sn -tp YourComodoCert.snk > YourComodoCert_pub.txt
    

    用文本编辑器打开 YourComodoCert_pub.txt,在那里你会发现“公钥是”部分 - 从那里复制密钥并在 InternalsVisibleTo 中使用。

    【讨论】:

    • 谢谢我已经通过 sn.exe 尝试过了,抱歉我没有提到它。在此处出现该错误:“无法将密钥转换为令牌 - 程序集公钥无效。
    • sn -tp - 我加载了一个通过 postbuild 使用该证书签名的程序集,它告诉我公钥是 0 字节长。程序集肯定是用该证书签名的,在文件系统的属性中显示了数字签名。但似乎它没有用强名称和公钥签名。对我来说没有意义。
    • 你如何使用 postbuild 签名?也许这部分是错误的。
    • 好吧,我想我可能有误会。我使用 SignTool.exe 使用我信任的证书在我的 Postbuild 中对其进行签名。但在我看来,这与您可以在 Projectsettings 中指定的签名不同?我现在在 Projectsettings 中使用旧的不受信任的证书保留了签名过程,然后运行了使用受信任的证书签名的 postbuild。我将旧公钥留在了 InternalsVisibleTo 属性中。我现在在 File->Properties 中显示了一个数字签名,现在该程序集上还有一个带有公钥的强名称。
    • SignTool.exe 是完全不同的工具 - 它用于代码签名,与强名称无关。您需要我在回答中提到的“sn.exe”工具。
    猜你喜欢
    • 2012-02-24
    • 2012-07-05
    • 1970-01-01
    • 2016-07-15
    • 2020-04-13
    • 2019-05-20
    • 2013-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多