Excel 数字签名VBA代码的信任链未按预期工作

Excel 数字签名VBA代码的信任链未按预期工作,excel,vba,certificate,code-signing,Excel,Vba,Certificate,Code Signing,我创建了2个自签名证书: 根证书:MyRootCA自签名 代码签名证书:mycdesign签名人MyRootCA 现在,我将MyRootCA添加到Excel的信任中心中的受信任发布者,并使用myDesign对我的VBA代码进行签名(该代码未添加到信任中心) 现在我相信,因为我信任签名为MyDesign的MyRootCA,Excel也应该信任所有签名为MyDesign的代码(信任链)。但事实并非如此。仅当我将MyDesign添加到信任中心时,我的代码才受信任 有人知道我哪里想错了吗?或者,如果父证

我创建了2个自签名证书:

  • 根证书:
    MyRootCA
    自签名
  • 代码签名证书:
    mycdesign
    签名人
    MyRootCA
  • 现在,我将
    MyRootCA
    添加到Excel的信任中心中的受信任发布者,并使用
    myDesign
    对我的VBA代码进行签名(该代码未添加到信任中心)

    现在我相信,因为我信任签名为MyDesign的MyRootCA,Excel也应该信任所有签名为MyDesign的代码(信任链)。但事实并非如此。仅当我将MyDesign添加到信任中心时,我的代码才受信任

    有人知道我哪里想错了吗?或者,如果父证书受信任,Excel是否不信任子签名代码

    下面您可以看到
    A
    MyRootCA
    B
    MyCodeSign
    发布的
    A

    现在我认为,当我信任信任中心中的
    A
    时,所有用
    B
    签名的代码也应该被信任。但是Excel仍然要求信任/启用宏

    所以也许有人可以证实这个问题(所以我知道这不是我的错)或者反驳它?
    我正在开发最新版本的Office 2016 x64版本。如果有必要的话


    (很抱歉看到了德语屏幕截图)

    看起来您必须信任出版商,即使您拥有有效的证书:

    请看以下三个选项卡:

    可信CA |可信发布者|不可信发布者


    很明显,Excel让我抓狂,并将选项从

    • 禁用除数字签名宏以外的所有宏
    返回默认值(可能是在更新或其他过程中发生的):

    • 禁用带有通知的所有宏

      使用此选项,即使数字签名的VBA代码也会收到安全警告,并要求您激活宏

    当然,对于“禁用除数字签名宏以外的所有宏”,信任链是有效的,我不需要信任每一个证书。正如我预期的那样,信任根CA就足够了

    • 专业方面:Excel启用宏,不再要求数字签名宏
    • 缺点:Excel禁用宏,不再对未签名的宏进行查询
    尽管如此,我还是错过了这两种选择的组合,比如:
    “使用通知禁用所有宏,数字签名宏除外”

    这完全符合我的愿望。

    转到数字签名设置,然后单击“详细信息…”检查您的认证路径选项卡。它应该显示证书和根目录之间的关系。@谢谢您的输入,证书路径看起来不错。我添加了一些截图,这应该会让它更清晰。当然,我信任出版商。不是签署代码(B)的人,而是签署签署代码(B)的证书的根用户(A)。因此,信任链应该是有效的,但Excel不遵循证书路径。拥有根目录使您的证书有效。否则,您将收到无效证书警告。我的意思是,你也必须信任每一个出版商,即使他们有一个有效的签名。这有记录在案吗?如果这是真的,那就违背了整个信任链的概念。如果这是真的,那么与自签名证书相比,拥有来自受信任CA的证书没有任何优势。信任根证书的好处是,您不必信任每个子证书。@Pᴇʜ拥有有效证书不同于信任出版商。我们是否应该信任任何可以购买有效证书的人编写的软件?不,我们不应该。对于使用自签名证书进行代码签名,您确实有一个有效的参数。除非你想分发软件,否则你需要确保没有人能假装成你。这就是为什么你要买一个可信的证书。所以它们是两个不同的问题。