建议将MS Office应用程序中的“宏安全级别”设置为“高”。 这将停止运行与项目关联的任何VBA代码,除非已对其进行签名(使用证书)。 受信任的签名将允许代码正常运行,而不受信任的签名将提示用户信任签发的CA(证书颁发机构)并启用代码,或者只是禁用代码。
一切都很好,但是假设您开发了可在工作场所使用的Excel,Word,Access等项目,并且您不想花很多钱从主要的发行CA之一购买昂贵的证书吗? 您还希望保护用户库免受其他地方的潜在恶意代码的侵害,但要运行您的
官方顺利进行,没有持续的提示。可以使用selfcert.exe进行自我认证,但是以这种方式创建证书时,不能导出其私钥。 Windows证书控制台的导出向导说“关联的私钥被标记为不可导出”。 这实际上意味着它只能在使用证书的PC上运行。 这似乎是远远不够的。
本文介绍了如何在无需太多麻烦的情况下实现这一目标。 构建它的大部分细节来自
http://www.source-code.biz ,所以我对此表示感谢。 创建证书文件:若要创建可用于在多台计算机上签名MS-Office VBA项目(Excel / Word宏)的证书文件(.PFX),需要三个可执行文件:
MakeCert.Exe Cert2Spc.Exe PVKImprt.Exe注意 PVKImprt.Exe是下载的名称,以及下载内部的文件的名称。 里面的一个很重要。 容易出错,因为某种原因它被双重压缩了。
如果链接消失了,我还将这些可执行文件的副本作为附件(CodeSigning.Zip)包括在内。 该文件中的PVKImprt.Exe是实际需要的,而无需重新提取。
解决方案: 参数:可以使用以下命令创建一个PFX文件(PKCS#12),该文件包含自签名证书以及关联的私钥,但是在开始之前,我们需要解释/定义一些参数:
%Name%=您希望证书显示为的名称。
%File%=要使用的文件名(不带扩展名)。
%PW%=确定用于证书的密码。
证书创建:MakeCert -r -n "CN=%Name%" -b 01/01/2000 -e 01/01/2099 -eku 1.3.6.1.5.5.7.3.3 -sv %File%.pvk %File%.cer
******** You will be asked for a password (%PW%) 3 times.
Cert2Spc %File%.cer %File%.spc
PVKImprt -pfx %File%.spc %File%.pvk
******** Enter password (%PW%) to start the Wizard.
******** Select to export the private key.
******** Select to "include all certificates in the certification path" & "to enable strong protection".
******** Enter password (%PW%) again, twice.
******** Enter, or browse to, the name of the export file required (path\%File%.pfx).
******** Finish if / when you have checked the details on the final screen.
最后一条命令(pvkimprt -pfx ...)创建文件%File%.pfx。
然后可以将此PFX文件导入Windows证书存储区并用于代码签名。
(MakeCert.Exe和Cert2Spc.Exe是几个Microsoft SDK的一部分,例如Platform SDK或DotNet SDK,可以从microsoft.com下载)。
证书安装:在可用.pfx文件的情况下,请按照以下步骤安装将项目签名到PC的功能:
- 打开控制面板 。
- 选择“ Internet选项” 。
- 选择内容选项卡。
- 单击证书 。
- 点击导入...
- 点击下一步 。
- 点击浏览 。
- 选择Type = Personal Information Exchange(.pfx)的文件 。
- 选择%File%.pfx 。
- 点击下一步 。
- 再次输入%PW% ,然后根据需要选择“ 启用强私钥保护” 。
- 选择将此密钥标记为可导出 。
- 点击下一步 。
- 选择自动选择证书存储 。
- 单击下一步,然后单击完成 。
现在安装了证书,您需要使用它签署一个项目。
如果您没有空位:
- 打开Excel。
- 在单元格A1中键入任何内容(任何内容)。
- 使用Alt-F11切换到VBA编辑器。
- 在项目资源管理器窗格(Ctrl-R)中,双击ThisWorkbook 。
- 在“代码”窗格中,粘贴以下简短代码:
Option Explicit Private Sub Workbook_Open() Call MsgBox("Hello World") End Sub
- 选择工具 / 数字签名 / 选择 。
- 选择证书。
- 单击确定 。
- 使用Alt-F11切换回Excel并保存文件(例如Test.Xls)。
希望信任此签名(使用2007年之前的Access版本)的任何人都应该:
- 打开Excel并确保将安全级别设置为“高”(“ 工具” /“ 宏” /“ 安全性” /“ 高” )。
- 打开一个包含签名项目的文件(例如Test.Xls)。
- 弹出“ 安全警告”窗口时,选择“ 始终信任来自此发布者的宏”(如果它未显示为灰色)
- 单击启用宏 。
- 如果显示为灰色:
- 单击详细信息... / 查看证书 / 安装证书...
- 像以前一样浏览并“完成”向导。
- 关闭“ 安全警告”窗口(顶部的X确保文件没有打开)。
- 重新打开文件。 选择始终信任来自此发布者的宏 (不再显示为灰色)
- 单击启用宏 。
希望信任此签名(使用Access 2007)的任何人都应该:
- 打开一个数据库,您知道该数据库已经由您希望信任其发布者的证书签名。
- 带有选项按钮的窗口顶部附近会出现一条安全警告消息。 点击这个。
- 选择显示签名详细信息 。
- 选择查看证书 。
- 点击安装证书...
- 显示向导时,单击“ 下一步 ”。
- 选择基于证书类型自动选择证书存储单选按钮。
- 单击下一步 。
- 点击完成 。
- 对您是否要安装此证书的问题 ,回答“ 是” 。
- 单击确定 。
- 单击确定 。
- 单击确定 。
- 选择“信任此发布者的所有文档”
- 单击确定 。
From: https://bytes.com/topic/access/insights/863718-code-signing