在Windows 10中缺少makecert.exe,如何获取并使用它

19

我正在使用Windows 10。当我尝试运行生成证书的命令时,如makecert.exe, 我发现我没有makecert.exe,并出现以下错误:

'makecert' 不是内部或外部命令,可执行程序或批处理文件。

我已安装Windows 10的Windows SDK。

6个回答

24

它可能已经被安装,但很可能不在路径中。

比如,在C:\Program Files (x86)\Windows Kits\10\bin\10.0.16299.0\x64下可以找到它,但你也可以在C:\Program Files (x86)\Windows Kits\10\bin\10.0.16299.0\x86下找到另一个。路径中的确切版本将根据你安装的SDK的版本而变化。

然而,这两个路径都没有被包含在我的PATH环境变量中(我也不记得在安装SDK后明确地删除它),所以我不能在命令行中直接输入makecert,我必须提供我想要运行的完整路径。


一种方便的查找拷贝所在位置的方法是使用where命令。这里我将搜索限定在SDK目录下,但如果你愿意,你可以搜索整个硬盘:

C:\Users\Damien>where /R "C:\Program Files (x86)\Windows Kits" makecert.*
C:\Program Files (x86)\Windows Kits\10\bin\10.0.16299.0\arm64\makecert.exe
C:\Program Files (x86)\Windows Kits\10\bin\10.0.16299.0\x64\makecert.exe
C:\Program Files (x86)\Windows Kits\10\bin\10.0.16299.0\x86\makecert.exe

首先感谢您的回答,但是在这个路径下我找不到makecert。!! - Te7a
1
@Te7a - 你是否这些路径(或类似的路径,考虑到版本差异)?如果是这样,它们包含了任何东西吗?如果它们包含一些程序但不包括makecert,我建议重新运行SDK安装程序,看看是否错过了一些可选组件,其中包括makecert。 - Damien_The_Unbeliever
"Windows Kits" 不是标准 Windows 10 安装的一部分。 - OMA
谢谢,我已将这些路径添加到我的先前路径列表中。 - XouDo

14

当前 makecert 已不再使用,新方法需要使用管理员权限的 powershell 'New-SelfSignedCertificate',例如:

1.- We create a new root trusted cert:
$rootCert = New-SelfSignedCertificate -Subject 'CN=TestRootCA,O=TestRootCA,OU=TestRootCA' -KeyExportPolicy Exportable -KeyUsage CertSign,CRLSign,DigitalSignature -KeyLength 2048 -KeyUsageProperty All -KeyAlgorithm 'RSA' -HashAlgorithm 'SHA256'  -Provider 'Microsoft Enhanced RSA and AES Cryptographic Provider'

2.- We create the cert from the root trusted cert chain:
New-SelfSignedCertificate -DnsName "localhost" -FriendlyName "MyCert" -CertStoreLocation "cert:\LocalMachine\My" -Signer $rootCert -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.1") -Provider "Microsoft Strong Cryptographic Provider" -HashAlgorithm "SHA256" -NotAfter (Get-Date).AddYears(10)

3.- We copy the thumbprint returned by the last command

4.- (If neccesary) We remove the last association ip/port/cert:
netsh http delete sslcert ipport=0.0.0.0:443

5.- We associate the new certificate with any ip and port 443 (the appid value does not matter, is any valid guid):
netsh http add sslcert ipport=0.0.0.0:443 appid='{214124cd-d05b-4309-9af9-9caa44b2b74a}' certhash=here_the_copied_thumbprint

6.- Now, you must open MMC (Certificates Local Computer) and drag and drop the 'TestRootCA' certificate from your 'Personal/Certificates' subfolder to 'Trusted Root Certification Authorities/Certificates' subfolder.

这些命令还可以解决后来 Google Chrome 返回的“ERR_CERT_WEAK_SIGNATURE_ALGORITHM”错误,因为证书是使用 SHA1 而不是 SHA256 创建的。


这个很好用!谢谢。你能引用一下 makecert.exe 被列为弃用的来源吗? - slolife
@slolife,请查看 https://learn.microsoft.com/en-us/windows/win32/seccrypto/makecert。 - BuvinJ
请注意,New-SelfSignedCertificate 需要 PowerShell v.4 或更高版本(相当于 Windows v8.1 / Windows Server 2012 R2 或更高版本的开箱即用)。 - BuvinJ
太棒了,成功了! - m1m1k
这个方法一直很好,直到第6步。我找不到要拖入MMC的文件夹。在哪里可以找到它? - Lars Ljungberg
要在MMC中使用Snap证书,请参见https://learn.microsoft.com/en-us/dotnet/framework/wcf/feature-details/how-to-view-certificates-with-the-mmc-snap-in,或者您也可以直接搜索“certlm.msc”。 - beer73

8
如果您已安装了Fiddler,那么Fiddler也会带有makecert.exe。它位于:
C:\Users\<yourwindowslogin>\AppData\Local\Programs\Fiddler\makecert.exe 

7

以下是我安装makecert.exe文件的步骤:

(注意:我首先安装了Windows 10 SDK,但该版本并未在“bin”目录中安装makecert.exe。没关系!)

  1. https://www.microsoft.com/en-us/download/details.aspx?id=8279下载Windows SDK版本7.1 ISO。
  2. 我下载的ISO名称是GRMSDK_EN_DVD.iso。
  3. 进入下载目录,并将此ISO挂载(Windows 7/10中有软件可使挂载变得简单)。
  4. 一旦挂载完成,进入名为“Setup\WinSDKTools”的ISO目录,您将在此目录中看到两个文件。其中一个是“WinSDKTools_x86.msi”,另一个是“cab1.cab”。
  5. 将这两个文件复制到硬盘上的空目录中。
  6. 从硬盘上转到您复制这些文件的目录,并右键单击“WinSDKTools_x86.msi”,然后选择安装。
  7. 在硬盘上查找新创建的目录,其位置为“C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1\Bin”。
  8. 现在,makecert.exe应该位于此新目录中,还有其他一些应用程序和文件夹。
  9. 受益?

谢谢!这个方法完美解决了我的问题,只是我不得不猜测应该下载哪一个ISO文件,“GRMSDK_EN_DVD.iso”、“GRMSDKIAI_EN_DVD.iso”或“GRMSDKX_EN_DVD.iso”(一点都不直观,为什么微软要让你在这三个难以理解的文件名之间选择?!)。我只选择了第一个ISO文件,果然,Makecert.exe就在里面,太好了!但是,为什么它只存在于Windows 7的SDK中呢?自十多年前以来,它从未被更新过吗?! - OMA
Makecert.exe从被弃用到SDK中完全不再包含。新的解决方案是使用PowerShell(如其他答案中所述)。如果需要它,您将需要获取旧版SDK。我相信最后一个带有它的是10.0.18362.0套件。 - BuvinJ

2
我知道现在可能太晚了,但我通过安装旧版的Windows 10 SDK版本来解决了这个问题: 注:Original Answer翻译成“最初的回答”,这句话并没有在需要翻译的内容中出现,因此未被翻译。

1

据我所知,这是正确的。Makecert似乎可以作为独立的exe文件运行。 - BuvinJ
1
链接已失效。 - Lars Ljungberg
1
从一个你不认识的人在互联网上发布的链接下载一个未知的可执行文件有多安全? - Aleks G

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接