65.9K
CodeProject 正在变化。 阅读更多。
Home

代码签名

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.39/5 (29投票s)

2005年12月19日

CPOL

2分钟阅读

viewsIcon

242248

downloadIcon

915

如何用您自己的证书签名代码并将证书安装到设备上

引言

这篇文章仅用于测试目的,签署代码的最佳方法是 Mobile2Market、Verisign 等……
使用 WM5,微软也在 PocketPC 上实现了新的安全模式。
新的模式要求应用程序使用有效的证书进行签名,以便在设备上无问题地运行。 

对于简单的应用程序,该模式不是问题。您将获得一些无聊的弹出窗口,以运行应用程序或第一次安装 cab 文件。当我们尝试部署服务或驱动程序时,我们面临更多问题,我们的 DLL 或应用程序将无法运行,因为该模式是在 service.exedevice.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
使用这些命令,我们得到两个文件,其中包含我们证书的 sha1base64 值。因此,创建一个空文件 '_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 文件
© . All rights reserved.