为windows 驱动程序签名_nwinxoj_newkelt的博客-程序员宅基地

技术标签: 签名  windows8  驱动  64位  

客户要求我们提供windows 8 64位的驱动程序,我们有windows 7 64位的驱动,但不知它在windows 8 上能否正常工作,安装了一个win8 64位虚拟机,安装驱动,在最后一步停了下来,就是不给安装,也没有任何错误提示。但是,在windows 8 32位平台上却可以正常安装和使用。查了相关资料才知道,从vista开始,微软对64位系统的有内核代码的驱动程序要求变得严格,要求一定要签名才给予安装。虽然也可以采用一些方法把强制签名选项关闭,但这肯定不是用户愿意接受的方式,所以我们需要对驱动签名。

    要签名首先要申请一张证书,一般是从very sign 公司申请代码签名证书,一年期有效,3800元,我们公司去年申请过一张证书,虽然已经过期了,我试试看能不能混过去再说。

    准备好签名需要用的工具。

    首先是证书,申请来的证书一般以pfx格式保存。双击它,出现导入证书对话框,按照提示,一步步做下去,输入密码,勾选“标志此密钥为可导出的” 选项,最后提示成功导入密钥。注意这里导入的是私钥,也就是我们用来签名的密钥。

    verisign 公司的两个公钥也需要导入。这两个密钥在网上是公开的。

http://www.verisign.com/support/verisign-intermediate-ca/code-signing-intermediate/index.html

这里把它贴出来
主密钥:
----BEGIN CERTIFICATE-----
MIIE0DCCBDmgAwIBAgIQJQzo4DBhLp8rifcFTXz4/TANBgkqhkiG9w0BAQUFADBf
MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xNzA1BgNVBAsT
LkNsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkw
HhcNMDYxMTA4MDAwMDAwWhcNMjExMTA3MjM1OTU5WjCByjELMAkGA1UEBhMCVVMx
FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
dCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZv
ciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAz
IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwggEi
MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1nmAMqudLO07cfLw8
RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbext0uz/o9+B1fs70Pb
ZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIzSdhDY2pSS9KP6HBR
TdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQGBO+QueQA5N06tRn/
Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+rCpSx4/VBEnkjWNH
iDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/NIeWiu5T6CUVAgMB
AAGjggGbMIIBlzAPBgNVHRMBAf8EBTADAQH/MDEGA1UdHwQqMCgwJqAkoCKGIGh0
dHA6Ly9jcmwudmVyaXNpZ24uY29tL3BjYTMuY3JsMA4GA1UdDwEB/wQEAwIBBjA9
BgNVHSAENjA0MDIGBFUdIAAwKjAoBggrBgEFBQcCARYcaHR0cHM6Ly93d3cudmVy
aXNpZ24uY29tL2NwczAdBgNVHQ4EFgQUf9Nlp8Ld7LvwMAnzQzn6Aq8zMTMwbQYI
KwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAHBgUrDgMCGgQU
j+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24uY29t
L3ZzbG9nby5naWYwNAYIKwYBBQUHAQEEKDAmMCQGCCsGAQUFBzABhhhodHRwOi8v
b2NzcC52ZXJpc2lnbi5jb20wPgYDVR0lBDcwNQYIKwYBBQUHAwEGCCsGAQUFBwMC
BggrBgEFBQcDAwYJYIZIAYb4QgQBBgpghkgBhvhFAQgBMA0GCSqGSIb3DQEBBQUA
A4GBABMC3fjohgDyWvj4IAxZiGIHzs73Tvm7WaGY5eE43U68ZhjTresY8g3JbT5K
lCDDPLq9ZVTGr0SzEK0saz6r1we2uIFjxfleLuUqZ87NMwwq14lWAyMfs77oOghZ
tOxFNfeKW/9mz1Cvxm1XjRl4t7mi0VfqH5pLr7rJjhJ+xr3/
-----END CERTIFICATE-----
次密钥:
-----BEGIN CERTIFICATE-----
MIIGCjCCBPKgAwIBAgIQUgDlqiVW/BqG7ZbJ1EszxzANBgkqhkiG9w0BAQUFADCB
yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp
U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW
ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0
aG9yaXR5IC0gRzUwHhcNMTAwMjA4MDAwMDAwWhcNMjAwMjA3MjM1OTU5WjCBtDEL
MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW
ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTswOQYDVQQLEzJUZXJtcyBvZiB1c2UgYXQg
aHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYSAoYykxMDEuMCwGA1UEAxMlVmVy
aVNpZ24gQ2xhc3MgMyBDb2RlIFNpZ25pbmcgMjAxMCBDQTCCASIwDQYJKoZIhvcN
AQEBBQADggEPADCCAQoCggEBAPUjS16l14q7MunUV/fv5Mcmfq0ZmP6onX2U9jZr
ENd1gTB/BGh/yyt1Hs0dCIzfaZSnN6Oce4DgmeHuN01fzjsU7obU0PUnNbwlCzin
jGOdF6MIpauw+81qYoJM1SHaG9nx44Q7iipPhVuQAU/Jp3YQfycDfL6ufn3B3fkF
vBtInGnnwKQ8PEEAPt+W5cXklHHWVQHHACZKQDy1oSapDKdtgI6QJXvPvz8c6y+W
+uWHd8a1VrJ6O1QwUxvfYjT/HtH0WpMoheVMF05+W/2kk5l/383vpHXv7xX2R+f4
GXLYLjQaprSnTH69u08MPVfxMNamNo7WgHbXGS6lzX40LYkCAwEAAaOCAf4wggH6
MBIGA1UdEwEB/wQIMAYBAf8CAQAwcAYDVR0gBGkwZzBlBgtghkgBhvhFAQcXAzBW
MCgGCCsGAQUFBwIBFhxodHRwczovL3d3dy52ZXJpc2lnbi5jb20vY3BzMCoGCCsG
AQUFBwICMB4aHGh0dHBzOi8vd3d3LnZlcmlzaWduLmNvbS9ycGEwDgYDVR0PAQH/
BAQDAgEGMG0GCCsGAQUFBwEMBGEwX6FdoFswWTBXMFUWCWltYWdlL2dpZjAhMB8w
BwYFKw4DAhoEFI/l0xqGrI2Oa8PPgGrUSBgsexkuMCUWI2h0dHA6Ly9sb2dvLnZl
cmlzaWduLmNvbS92c2xvZ28uZ2lmMDQGA1UdHwQtMCswKaAnoCWGI2h0dHA6Ly9j
cmwudmVyaXNpZ24uY29tL3BjYTMtZzUuY3JsMDQGCCsGAQUFBwEBBCgwJjAkBggr
BgEFBQcwAYYYaHR0cDovL29jc3AudmVyaXNpZ24uY29tMB0GA1UdJQQWMBQGCCsG
AQUFBwMCBggrBgEFBQcDAzAoBgNVHREEITAfpB0wGzEZMBcGA1UEAxMQVmVyaVNp
Z25NUEtJLTItODAdBgNVHQ4EFgQUz5mp6nsm9EvJjo/X8AUm7+PSp50wHwYDVR0j
BBgwFoAUf9Nlp8Ld7LvwMAnzQzn6Aq8zMTMwDQYJKoZIhvcNAQEFBQADggEBAFYi
5jSkxGHLSLkBrVaoZA/ZjJHEu8wM5a16oCJ/30c4Si1s0X9xGnzscKmx8E/kDwxT
+hVe/nSYSSSFgSYckRRHsExjjLuhNNTGRegNhSZzA9CpjGRt3HGS5kUFYBVZUTn8
WBRr/tSk7XlrCAxBcuc3IgYJviPpP0SaHulhncyxkFz8PdKNrEI9ZTbUtD1AKI+b
EM8jJsxLIMuQH12MTDTKPNjlN9ZvpSC9NOsm2a4N58Wa96G0IZEzb4boWLslfHQO
WP51G2M/zjF8m48blp7FU3aEW5ytkfqs7ZO6XcghU8KCU2OvEg1QhxEbPVRSloos
nD2SGgiaBS7Hk6VIkdM=
-----END CERTIFICATE-----

把这两个密钥分别保存为.cer格式的文件,双击它,安装证书,安装到系统去。

为了对跑在win8 64位系统上的程序进行签名,还需要微软的交叉签名证书 MSCV-VSClass3.cer 。这个证书同样也可以在网上下载到。
如果用来签名的证书是2010-10-10日后签发的,请下载After_10-10-10_MSCV-VSClass3.cer,如果是在此之前颁发的,应下载Before_10-10-10_MSCV-VSClass3.cer
http://msdn.microsoft.com/en-us/library/windows/hardware/dn170454%28v=vs.85%29.aspx
在以上链接有该证书的下载地址,遗憾的是此页面上的链接总打不开,不知是系统忙还是什么原因,我在在以下网址找到了它。
https://github.com/rstudio/rstudio/blob/master/package/win32/cert/After_10-10-10_MSCV-VSClass3.cer

在安装了windows ddk 8.1 的系统上也能找到该证书。

贴出来
-----BEGIN CERTIFICATE-----
MIIFmjCCA4KgAwIBAgIKYRmT5AAAAAAAHDANBgkqhkiG9w0BAQUFADB/MQswCQYD
VQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEe
MBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSkwJwYDVQQDEyBNaWNyb3Nv
ZnQgQ29kZSBWZXJpZmljYXRpb24gUm9vdDAeFw0xMTAyMjIxOTI1MTdaFw0yMTAy
MjIxOTM1MTdaMIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIElu
Yy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShj
KSAyMDA2IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkx
RTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlm
aWNhdGlvbiBBdXRob3JpdHkgLSBHNTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
AQoCggEBAK8kCAgpejWeYAyq50s7Ttx8vDxFHLsr4P4pAvlXCKNkhRUn9fGtyDGJ
XSLoKqqmQrOP+LlVt7G3S7P+j34HV+zvQ9tmYhVhz2ANpNje+ODDYgg9VBPrScpZ
VIUm5SuPG5/r9aGRwjNJ2ENjalJL0o/ocFFN0Ylpe8dw9rPcEnTbe11LVtOWvxV3
obD0oiXyrxySZxjl9AYE75C55ADk3Tq1Gf8CuvQ87uCL6zeL7PTXrPL28D2v3XWR
MxkdHEDLdCQZIZPZFP6sKlLHj9UESeSNY0eIPGmDy/5HvSt+T8WVrg6d1NFDwGdz
4xQIfuU/n3O4MwrPXT80h5aK7lPoJRUCAwEAAaOByzCByDARBgNVHSAECjAIMAYG
BFUdIAAwDwYDVR0TAQH/BAUwAwEB/zALBgNVHQ8EBAMCAYYwHQYDVR0OBBYEFH/T
ZafC3ey78DAJ80M5+gKvMzEzMB8GA1UdIwQYMBaAFGL7CiFbf0NuEdoJVFBr9dKW
cfGeMFUGA1UdHwROMEwwSqBIoEaGRGh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9w
a2kvY3JsL3Byb2R1Y3RzL01pY3Jvc29mdENvZGVWZXJpZlJvb3QuY3JsMA0GCSqG
SIb3DQEBBQUAA4ICAQCBKoIWjDRnK+UD6zR7jKKjUIr0VYbxHoyOrn3uAxnOcpUY
SK1iEf0g/T9HBgFa4uBvjBUsTjxqUGwLNqPPeg2cQrxc+BnVYONp5uIjQWeMaIN2
K4+Toyq1f75Z+6nJsiaPyqLzghuYPpGVJ5eGYe5bXQdrzYao4mWAqOIV4rK+IwVq
ugzzR5NNrKSMB3k5wGESOgUNiaPsn1eJhPvsynxHZhSR2LYPGV3muEqsvEfIcUOW
5jIgpdx3hv0844tx23ubA/y3HTJk6xZSoEOj+i6tWZJOfMfyM0JIOFE6fDjHGyQi
KEAeGkYfF9sY9/AnNWy4Y9nNuWRdK6Ve78YptPLH+CHMBLpX/QG2q8Zn+efTmX/0
9SL6cvX9/zocQjqh+YAYpe6NHNRmnkUB/qru//sXjzD38c0pxZ3stdVJAD2FuMu7
kzonaknAMK5myfcjKDJ2+aSDVshIzlqWqqDMDMR/tI6Xr23jVCfDn4bA1uRzCJcF
29BUYl4DSMLVn3+nZozQnbBP1NOYX0t6yX+yKVLQEoDHD1S2HmfNxqBsEQOE00h1
5yr+sDtuCjqma3aZBaPxd2hhMxRHBvxTf1K9khRcSiRqZ4yvjZCq0PZ5IRuTJnzD
zh69iDiSrkXGGWpJULMF+K5ZN4pqJQOUsVmBUOi6g4C3IzX0drlnHVkYrSCNlA==
-----END CERTIFICATE-----

至此证书准备完成了。

该准备签名需要的工具了。
        pvk2pfx.exe
        inf2cat.exe       
        signtool.exe

这几个工具是必须的。幸运的是,我的机器上安装了 winddk, build 7600, 我在ddk目录下找到了以上几个工具,用不着去下载了。
它们分别位于:
WinDDK\7600.16385.0\bin\x86\pvk2pfx.exe
WinDDK\7600.16385.0\bin\selfsign\inf2cat.exe
WinDDK\7600.16385.0\bin\x86\signtool.exe

证书和工具准备好了,可以开始签名了。

使用inf2cat 工具来生成一个cat 文件。

inf2cat  /driver:c:\MyDriver\ /os:7_X64,7_X86
其中c:\MyDriver 是驱动程序的 inf 文件所在路径。在inf文件内应该加入这么一行:
CatalogFile=MyCatalogFile.cat
把MyCatalogFile替换成你自己的CatalogFile 文件名。

如果以上命令正确执行了,会生成相应的CatalogFile文件,这里是MyCatalogFile.cat文件。

在执行这个命令时,总是报错 Microsoft.Whos.Winqual.Submissions.SubmissionBuilder.dll  not found
最后我来到inf2cat.exe所在的目录来执行这个命令,即WinDDK\7600.16385.0\bin\selfsign 执行成功了。其中WinDDK 是ddk的安装目录。

首先对CatalogFile文件进行签名

命令格式如下,因为我们的证书过期了,所验签名时要把系统时间改到有效期内,并且不要打time stamp.
signtool sign /v  /ac "MSCV-VSClass3.cer" /s MY /n "My Company Name"  "MyCatalogFile.cat"

如果要打time stamp, 可以执行

signtool sign /v  /ac "MSCV-VSClass3.cer" /s MY /n "My Company Name"  "c:\driver\driver.sys" /t http://timestamp.VeriSign.com/scripts/timstamp.dll
因为我们的证书已过期,就不打时间戳了。

然后依次对驱动程序中的文件进行签名   

signtool sign /v  /ac "MSCV-VSClass3.cer" /s MY /n "My Company Name"  "c:\driver\driver.sys"

其中MSCV-VSClass3.cer微软交叉签名证书所在路径,"My Company Name" 是申请代码签名证书的公司的名称。利用certMgr工具可以看到 “颁发给” 条目,后面的名称即此处应该填写的名称。

全部的文件签名完毕后,再到windows8平台上安装,会提示,无法验证此驱动的签名,选择  始终安装,已经可以安装了。

虽然证书过期了,但我们还是可以废物利用,帮助客户解决了一个问题。


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/newkelt/article/details/39316657

智能推荐

slf4j+log4j2的整合配置_log4j2整合slf4j_Soyoger的博客-程序员宅基地

Log4j 2是log4j 1.x和logback的改进版,据说采用了一些新技术(无锁异步、等等),使得日志的吞吐量、性能比log4j 1.x提高10倍,并解决了一些死锁的bug,而且配置更加简单灵活。下面是结合slf4j的配置和使用过程:1、引用依赖包及相关注释:1<!-- log配置:Log4j2 + Slf4j --><dependency> <gro..._log4j2整合slf4j

python爬虫入门,8分钟就够了,最简单的基础教学!_网络爬虫python教学_工程师大胖的博客-程序员宅基地

一、基础入门1.1什么是爬虫爬虫(spider,又网络爬虫),是指向网站/网络发起请求,获取资源后分析并提取有用数据的程序。从技术层面来说就是 通过程序模拟浏览器请求站点的行为,把站点返回的HTML代码/JSON数据/二进制数据(图片、视频) 爬到本地,进而提取自己需要的数据,存放起来使用。1.2爬虫基本流程用户获取网络数据的方式:方式1:浏览器提交请求—>下载网页代码—>..._网络爬虫python教学

Qt生成随机数的方法_草上爬的博客-程序员宅基地

1.生成随机数 生成随机数主要用到了函数qsrand和qrand,这两个函数在#include <QtGlobal>中,qsrand用来设置一个种子,该种子为qrand生成随机数的起始值。比如说qsrand(10),设置10为种子,那么qrand生成的随机数就在[10,32767]之间。而如果在qrand()前没有调用过qsrand(),那么qrand()就会自动调用qs..._qt生成随机数

json和xml_qq_37558379的博客-程序员宅基地

JSON在Web开发中的应用分类: Web技术 一、引言JSON(JavaScript Object Notiation)是一种轻量级的数据交换格式,它基于JavaScript语言,是在JavaScript的数组(array)和对象(object)基础上发展而来。和XML类似,都是独立于语言,在跨平台数据传输中非常有优势,但XML需要DOM来解析,而对浏览器来说,不同厂商的支持的XML DOM又有...

Java——实现简单的学生信息管理系统(很简单,无GUI)_java学生信息管理系统课程设计_宋子浩的博客-程序员宅基地

1.开篇这篇博文也是博主复习一下之前学过的 Java 的相关内容,通过使用 Java中的类、对象、构造器、set和get方法、接口、重写、集合(泛型)等一些相对来说不算太难的知识,来实现一个简易的学生信息管理系统。我写的真的很水,有些数据都不切实际,当然了,写这篇博文为大家分享主要还是为了回顾一下学过的内容、和大家共同交流、一起学习。下面我们一起来看一下程序代码的具体实现:????????????(注释写的很清楚了)2.程序代码2.1 学生信息操作相关接口package stude_java学生信息管理系统课程设计

随便推点

完全公平调度 c语言,完全公平调度器(cfs)系列文章(二)_李赔十学长的博客-程序员宅基地

6)静悄悄地过来,看看这个经常调用的函数,到底做了啥捏?static inline void__update_curr(struct cfs_rq *cfs_rq, struct sched_entity *curr,unsigned long delta_exec) 传进来的执行时间{unsigned long delta_exec_weighted;schedstat_set(curr-&g..._enqueue_entity

填充与步幅对卷积层形状的作用_卷积填充对卷积的影响_DevilXiao-CVer的博客-程序员宅基地

填充和步幅一般来说,假设输入形状是nh×nwn_h\times n_wnh​×nw​,卷积核窗口形状是kh×kwk_h\times k_wkh​×kw​,那么输出形状将会是(nh−kh+1)×(nw−kw+1).(n_h-k_h+1) \times (n_w-k_w+1).(nh​−kh​+1)×(nw​−kw​+1).所以卷积层的输出形状由输入形状和卷积核窗口形状决定。填充和步幅。它们可以对给定形状的输入和卷积核改变输出形状。填充填充(padding)是指在输入高和宽的两侧填充元素(通常是0元素_卷积填充对卷积的影响

phpmyadmin出现空密码登录被禁止&n…_Peter的游击战的博客-程序员宅基地

在Windows或者Linux下mysql安装后默认的密码为空,又当我们又安装了mysql的管理工具phpmyadmin后登陆时出现“空密码登陆呗禁止(参见允许密码为空)”。不能登录成功 解决办法如下:1..要是你想用空密码,则将phpmyadmin下的config.inc.php(根目录)或者config.default.php(根目录)再则:libr_空密码登录被禁止

如何在分组报表中实现组内数据补空行及组内页码_weixin_30542079的博客-程序员宅基地

在对报表数据进行打印时,经常会要求进行精确打印,比如一张纸能打印 20 行数据,如果超过就分页,如果不满 20 行,则在数据下方进行补够空行。这种情况最常见于银行对账信息等明细数据的打印。同时,在某些业务中还会按照一些字段分组,比如地区、类别等,在报表展示或打印时则要求先按照字段进行分组,将分组字段相同的数据放到一组内进行明细数据的打印,并在组内要求实现补空行操作。另外,对于分组数据,打印时所显示...

JfreeChart 制作折线图的实例_jfree 折线图-程序员宅基地

package cn.com.chart;import java.awt.Color;import org.jfree.chart.ChartFactory;import org.jfree.chart.ChartFrame;import org.jfree.chart.JFreeChart;import org.jfree.chart.plot.CategoryPlot;impor..._jfree 折线图

SpringBoot进阶教程(七十四)整合ELK_[虚幻私塾】的博客-程序员宅基地

优质资源分享 学习路线指引(点击解锁)知识定位人群定位 Python实战微信订餐小程序 进阶级本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。Python量化交易实战入门级手把手带你打造一个易扩展、更安全、效率更高的量化交易系统v阅读目录* v简介vdocker安装elkvspringboot整合elkv配置kibanavkibana汉化v源码地址v博客前言在上一篇

推荐文章

热门文章

相关标签