代码签名
如何用您自己的证书签名代码并将证书安装到设备上
引言
这篇文章仅用于测试目的,签署代码的最佳方法是 Mobile2Market、Verisign 等……
使用 WM5,微软也在 PocketPC 上实现了新的安全模式。
新的模式要求应用程序使用有效的证书进行签名,以便在设备上无问题地运行。
对于简单的应用程序,该模式不是问题。您将获得一些无聊的弹出窗口,以运行应用程序或第一次安装 cab 文件。当我们尝试部署服务或驱动程序时,我们面临更多问题,我们的 DLL 或应用程序将无法运行,因为该模式是在 service.exe 和 device.exe 进程之后加载的!
在本文中,我将解释如何在设备上部署我们自己的证书并签署我们的代码。
第 1 步 - 创建证书
第一步是创建我们的证书。为此,我们将使用实用程序 makecert.exe
makecert -r -sv MyCert.pvk -n "CN=MyCert" -b 01/01/2000 -e 01/01/2099 MyCert.cer
有关 makecert.exe 参数的更多信息,请参阅 MSDN 库。
现在我们有了我们的证书 (MyCert.cer) 和私钥 (MyCert.pvk),但我们需要 .pfx 将其传递给 signtool.exe,所以进入第 2 步。
第 2 步 - 从 .cer 创建 .pfx
要从 .cer 文件创建 .pfx 文件,我们必须运行 pvk2pfx.exe 工具
pvk2pfx.exe -pvk MyCert.pvk -spc MyCert.cer -pfx MyCert.pfx
该命令将创建一个 .pfx 文件 (MyCert.pfx)。
第 3 步 - 创建 provisioningdoc XML
好的,现在我们准备好构建我们的 cab 文件,它将在设备上安装我们的证书。为此,我们必须创建我们的 wap-provisioningdoc XML。
<?xml version="1.0" encoding="utf-8" ?>
<wap-provisioningdoc>
<characteristic type="CertificateStore">
<characteristic type="Privileged Execution Trust Authorities">
<characteristic type="[cert_sha1]">
<parm name="EncodedCertificate" value="[cert_base64]" />
</characteristic>
</characteristic>
</characteristic>
<characteristic type="CertificateStore">
<characteristic type="SPC">
<characteristic type="[cert_sha1]">
<parm name="EncodedCertificate" value="[cert_base64]" />
<parm name="Role" value="222" />
</characteristic>
</characteristic>
</characteristic>
</wap-provisioningdoc>
这是我们的 provisioningdoc 的标准模式。
我们必须使用从 MyCert.cer 获取的值填写 [cert_sha1
] 和 [cert_base64
]。要获取这些值,我们必须使用 openssl.exe 工具
openssl sha1 MyCert.cer > MyCert_sha1.txt
openssl base64 -in MyCert.cer > MyCert_base64.txt
使用这些命令,我们得到两个文件,其中包含我们证书的 sha1
和 base64
值。因此,创建一个空文件 '_setup.xml' 并将内容传递到
<?xml version="1.0" encoding="utf-8" ?>
<wap-provisioningdoc>
<characteristic type="CertificateStore">
<characteristic type="Privileged Execution Trust Authorities">
<characteristic type="30bc827f441fa4437b645163e49ade7226b362c3">
<parm name="EncodedCertificate"
value="MIIB7zCCAVigAwIBAgIQSZfc9OLump1HzDNpsZ2edTANBgkqhkiG9w0BAQQFADAR
MQ8wDQYDVQQDEwZNeUNlcnQwIBcNOTkxMjMxMjMwMDAwWhgPMjA5ODEyMzEyMzAw
MDBaMBExDzANBgNVBAMTBk15Q2VydDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkC
gYEAx6QQIhONxvNHrK+p1qgy/AY3/Q/rf7XGvMYmxENAdQFjgP2CpH/1Bgsa8MwK
XxViZqW2DbixDas77M+cG3BnxtdK42xuhBlzVCq8wiOh7/q9SZp9wKj94c7k5jok
L1BgHT2dH2DHUgnxG6Y9mvowX/DJ8gvbNKR1p4FQpK74NvUCAwEAAaNGMEQwQgYD
VR0BBDswOYAQfyce0/6l1q4oeResHzIEZ6ETMBExDzANBgNVBAMTBk15Q2VydIIQ
SZfc9OLump1HzDNpsZ2edTANBgkqhkiG9w0BAQQFAAOBgQAEqy6rTbjmV/6zgYBY
+gQQqBHf4GMvyEUR9g5+p/esG7GDve/qbZ4bm1BOSdRfgzMsda2guciMD54QPHNp
k+wdE0tSuQN90Dla8109GmTdFyZkVezSDmuCkbX0BjQW2dJ6egvGG2mnA7Q6/5yt
4ftcV6hExesZviGUKXdBhBM2Dg==" />
</characteristic>
</characteristic>
</characteristic>
<characteristic type="CertificateStore">
<characteristic type="SPC">
<characteristic type="30bc827f441fa4437b645163e49ade7226b362c3">
<parm name="EncodedCertificate"
value="MIIB7zCCAVigAwIBAgIQSZfc9OLump1HzDNpsZ2edTANBgkqhkiG9w0BAQQFADAR
MQ8wDQYDVQQDEwZNeUNlcnQwIBcNOTkxMjMxMjMwMDAwWhgPMjA5ODEyMzEyMzAw
MDBaMBExDzANBgNVBAMTBk15Q2VydDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkC
gYEAx6QQIhONxvNHrK+p1qgy/AY3/Q/rf7XGvMYmxENAdQFjgP2CpH/1Bgsa8MwK
XxViZqW2DbixDas77M+cG3BnxtdK42xuhBlzVCq8wiOh7/q9SZp9wKj94c7k5jok
L1BgHT2dH2DHUgnxG6Y9mvowX/DJ8gvbNKR1p4FQpK74NvUCAwEAAaNGMEQwQgYD
VR0BBDswOYAQfyce0/6l1q4oeResHzIEZ6ETMBExDzANBgNVBAMTBk15Q2VydIIQ
SZfc9OLump1HzDNpsZ2edTANBgkqhkiG9w0BAQQFAAOBgQAEqy6rTbjmV/6zgYBY
+gQQqBHf4GMvyEUR9g5+p/esG7GDve/qbZ4bm1BOSdRfgzMsda2guciMD54QPHNp
k+wdE0tSuQN90Dla8109GmTdFyZkVezSDmuCkbX0BjQW2dJ6egvGG2mnA7Q6/5yt
4ftcV6hExesZviGUKXdBhBM2Dg==" />
<parm name="Role" value="222" />
</characteristic>
</characteristic>
</characteristic>
</wap-provisioningdoc>
我们已准备好构建我们的 cab 文件以部署在我们的设备上。
第 4 步 - 构建 .cab
这是最简单的步骤。我们必须运行 makecab.exe
工具
makecab.exe _setup.xml mycert_cert.cab
我们的证书现在已准备好安装在设备上!
第 5 步 - 签署我们的应用程序代码
在我们的设备上安装证书后,我们可以使用 MyCert.pfx 签署我们的代码,以便我们的代码作为受信任的代码运行。
我们必须使用 signtool.exe 工具
signtool.exe sign /f MyCert.pfx *.exe *.cab
或
signcode -v MyCert.pvk -spc MyCert.cer *.exe
通过这五个简单的步骤,我们拥有我们的证书应用程序!
相关链接
历史
- 2005 年 12 月 19 日 - 初始文章
- 2005 年 12 月 30 日 - 更正了第 5 步的命令行
- 2005 年 12 月 31 日 - 重新生成了证书并更新了 zip 文件
- 2006 年 11 月 15 日 - 在第 5 步中添加了命令行并使用 signcode.exe 工具更新了 zip 文件