如何创建比SHA-1强的自签名证书?


8

对于开发环境,我可以在IIS7.5中创建创建自签名证书。但是那个证书是SHA-1,最近浏览器抱怨它。当我打开FireBug时,我看到以下警告:

“此站点使用SHA-1证书;建议您使用具有签名算法的证书,这些算法使用比SHA-1更强的哈希函数。”

所以我的问题是:

1)有没有办法创建比SHA-1强的自签名证书?

2)如果没有,是否有办法告诉浏览器停止显示这些警告?

更新

我最终使用了@vcsjones答案,但这仅使我到目前为止。在此之前,我们必须解决一些问题,然后才能使其工作。

1)由于某种原因,我无法使用密码导入证书。所以我最终创建了一个没有它的。

2)当我通过IIS导入.pfx证书时,当我尝试在“编辑绑定”中应用新证书时,我一直收到“指定的登录会话不存在”的信息。因此,我进行了很少的研究,发现此SO答案非常有用,尤其是Mike L的答案。

我要补充的另一件事是,当您导入证书时,请记住选择.pfx证书。导入向导的默认选择是* .cer,您可以导入(我犯了一个错误),但是后来我无法在IIS服务器证书中看到证书。当我靠近时,它缺少图标中的小键。现在,我做了研究,能够通过KB-889651文章对其进行修复。因此,请确保您导入.pfx,并且它无需修复即可工作。

另请注意,如果您对此证书有信任问题,也请将其导入“受信任的根证书颁发机构”。

Answers:


8

当然。makecertWindows SDK中的实用程序可以执行以下操作:

makecert -len 2048 -r -a sha256 -sv private.pvk -n CN=localhost cert.cer

-a参数设置哈希算法。这会吐出PVK和DER .cer文件。当然,您也可以将通用名称更改为您想要的任何名称,我只是以localhost为例。您可以使用pvk2pfx(也是SDK的一部分)将它们组合为PFX(IIS在导入证书时更喜欢使用的东西):

pvk2pfx -spc cert.cer -pvk private.pvk -pfx out.pfx

这只是将makecert生成的两个文件合并到一个PKCS12 .pfx文件中。

使用生成的PFX文件,您将打开IIS并将其导入到“服务器证书”下,然后更改站点的绑定以使用新证书。


我创建了它,但是在哪里可以找到cert.cer和out.pfx?
彼得

1
@peter无论控制台的工作目录是什么。您将C:\Path\ToADirectory>在命令提示符下看到类似的内容。那是你的工作目录。
vcsjones

当我尝试在iis中导入out.pfx时,它要求输入密码。我键入了在使用您的注释创建证书时设置的密码,但是密码失败了,您知道原因吗?
彼得

vcsjones我在系统中安装了证书,然后在IIS中设置了binind,当我在firefox中浏览时,它没有打开,但是在IE中,我继续出现错误提示并能够看到网站,但它显示re图标,例如证书不是来自受信任的证书颁发机构
彼得

1
需要注意的一点是,makecert现在已被弃用。对于Windows 8.1 / Windows Server 2012 R2和更高版本,您可以改用此处描述的Powershell命令: stackoverflow.com/a/19446469/914490
Mike

6

我正在使用锁定的Windows 7 Enterprise计算机,因此无法安装Windows SDK进行访问makecert。这是我创建sha256自签名证书的方式(取自https://core.telegram.org/bots/self-signed):

  1. 确定要将证书保存在哪个目录中
  2. 在该目录中创建一个文本文件,其template.txt内容如下:

    [NewRequest]
    
    ; At least one value must be set in this section
    Subject = "CN={your.domain.com}"
    KeyLength = 2048
    KeyAlgorithm = RSA
    HashAlgorithm = sha256
    ;MachineKeySet = true
    RequestType = Cert
    UseExistingKeySet=false ;generates a new private key (for export)
    Exportable = true ;makes the private key exportable with the PFX
    
  3. 替换{your.domain.com}为您用来访问网站的地址,例如"CN=localhost"

  4. 打开命令提示符并转到您的证书目录
  5. certreq -new template.txt RequestFileOut
  6. 您需要知道序列号,因此请运行certutil -store -user my以获取包含序列号的转储
  7. {SERIALNUMBER}转储中的序列号和{YOURDER}.crt输出文件的名称替换:certutil -user -store -split my {SERIALNUMBER} {YOURDER}.crt
  8. {YOURDER}.crt输入文件{YOURPEM}.cer名和输出文件名替换:certutil -encode {YOURDER}.crt {YOURPEM}.cer
  9. {your.domain.com}用您的实际(测试)域名和{YOURPKCS}.pfx输出文件的名称替换:certutil -exportpfx -user {your.domain.com} {YOURPKCS}.pfx NoChain

之后,我转到IIS管理器,依次单击“站点-> {站点名称}->绑定...”(在“编辑站点”下)。然后我单击https / 443,因为我已经对其进行了设置,编辑...,并从列表中选择了新证书。

Firefox抱怨我的网站使用的是自签名证书,因此我只是将其添加为例外,瞧瞧!有效!


这是大多数没有安装的工作示例,有时在prod服务器上是不可能的。
hungryMind

我无法在Windows 7上使用此命令,但在Server 2012上却能正常工作。作为一个注释,{yourpem} .cer和{yourpkcs.pfx}是由列出的两个命令生成的。我可能想使用与{yourder} .crt相同的名称。因此,为简单起见,{yourcert} .crt,{yourcert} .cer,{yourcert} .pfx
DaBlue

0

是的,我也收到“指定的登录会话不存在”的错误/警告消息。

我再次单击确定,它接受了它。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.