Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Security 增强型强名称(SNK)和个人交换格式(PFX)之间有什么区别?应该在什么时候使用它们?_Security_Certificate_.net Assembly_Code Signing_Strongname - Fatal编程技术网

Security 增强型强名称(SNK)和个人交换格式(PFX)之间有什么区别?应该在什么时候使用它们?

Security 增强型强名称(SNK)和个人交换格式(PFX)之间有什么区别?应该在什么时候使用它们?,security,certificate,.net-assembly,code-signing,strongname,Security,Certificate,.net Assembly,Code Signing,Strongname,这个问题是下列问题的延伸: 我正在研究自定义程序集的强命名和代码签名,并阅读了各种SO帖子(见上文)和MSDN。我理解如下: 在没有密码的情况下对程序集进行强命名会创建一个SNK文件,并且只标识程序集的发布者,以便将其部署到GAC,并减轻由来自不同发布者的同名程序集引起的所谓调用DLL Hell 使用密码对程序集进行强命名会向程序集添加代码签名,并创建一个PFX文件,而不是SNK文件。这既可以识别发布者,又可以验证代码是否未被篡改。注意:此文件可以由受信任的证书颁发机构(如Veris

这个问题是下列问题的延伸:

我正在研究自定义程序集的强命名和代码签名,并阅读了各种SO帖子(见上文)和MSDN。我理解如下:

  • 在没有密码的情况下对程序集进行强命名会创建一个SNK文件,并且只标识程序集的发布者,以便将其部署到GAC,并减轻由来自不同发布者的同名程序集引起的所谓调用
    DLL Hell
  • 使用密码对程序集进行强命名会向程序集添加代码签名,并创建一个PFX文件,而不是SNK文件。这既可以识别发布者,又可以验证代码是否未被篡改。注意:此文件可以由受信任的证书颁发机构(如Verisign和Digicert)创建并导入,也可以是在组织内创建的自签名证书。自行创建PFX与创建强命名程序集的步骤相同,但只需向其添加密码
  • 增强的强命名对我来说似乎有点神秘。它包括创建一个强命名的SNK文件(即没有密码),然后从中提取私钥。它似乎只允许从不推荐的哈希算法迁移

  • 我理解2是1的逻辑扩展。我的上述理解正确吗?但是,上面的2和3有什么区别?3是否比1有任何优势,或者它只是一种只允许跨算法迁移的方式?换言之,我认为2和3的存在有着不同的原因;这是什么原因/实现?

    添加到1:您需要强命名以确保未引用未签名的程序集。您可能不想使用GAC

    更正为2:代码签名!=强命名。对于强命名,请使用
    sn.exe
    创建密钥。对于代码签名,需要具有私钥的x.509数字证书。证书本身没有密码。PFX/PKCS#12容器格式使用密码来保护私钥。其他选择。例如,可以使用智能卡或代币


    所以2不是1的扩展。3的优点是使用了更好的散列算法和两个而不是一个签名。

    感谢您的澄清。我在这里提出了一个后续问题: