如何为本地主机创建自签名证书?


133

我已经完成了如何在本地主机上使用https / SSL中详细介绍的步骤但这会为我的机器名称设置一个自签名证书,当通过https:// localhost浏览它时,我会收到IE警告。

有没有一种方法可以为“ localhost”创建自签名证书来避免此警告?


您是否将证书安装为CA?
vcsjones 2011年

我按照以下过程在Win7下将自签名证书安装到IIS中。但这为“ mymachinename”创建了证书,而“ localhost”则需要一个。
克里斯

1
嗨!考虑不建议makecert,将Auri的答案设置为主要答案。链接到答案:stackoverflow.com/a/44164653/1461602
Tormod Haugene

Answers:


81

尽管此帖子是针对Windows标记的,但它是OS X上的相关问题,我在其他地方都没有看到答案。以下是在OS X上为localhost创建自签名证书的步骤:

# Use 'localhost' for the 'Common name'
openssl req -x509 -sha256 -nodes -newkey rsa:2048 -days 365 -keyout localhost.key -out localhost.crt

# Add the cert to your keychain
open localhost.crt

在中Keychain Access,双击此新的localhost证书。展开“信任”旁边的箭头,然后选择“始终信任”。Chrome和Safari现在应该信任此证书。例如,如果要将此证书与node.js一起使用:

var options = {
    key: fs.readFileSync('/path/to/localhost.key').toString(),
    cert: fs.readFileSync('/path/to/localhost.crt').toString(),
    ciphers: 'ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES256-SHA384',
    honorCipherOrder: true,
    secureProtocol: 'TLSv1_2_method'
};

var server = require('https').createServer(options, app);

2
第一条命令ssh-keygen不必要,因为openssl命令还会创建一个新密钥(并覆盖ssh创建的密钥)。
费利克斯Saparelli

7
您也可以通过添加参数-subj '/CN=localhost'来完全自动化该过程openssl
费利克斯Saparelli

8
要使OS X从命令行信任它而不是单击它,您可以执行以下操作:sudo security add-trusted-cert -p ssl -d -r trustRoot -k ~/Library/Keychains/login.keychain localhost.crt
philfreo

1
也与linux有关。非常感谢。
Marcel

1
我遵循了所有这些步骤,然后ERR_SSL_VERSION_OR_CIPHER_MISMATCH在Chrome 60中安装了Safari,而Safari 10.1.2也不喜欢它。
styfle

61

由于此问题带有标签,IIS并且我找不到如何获得受信任证书的好答案,因此我将给我2美分:

首先以管理员身份使用PowerShell中@AuriRahimzadeh的命令:

New-SelfSignedCertificate -DnsName "localhost" -CertStoreLocation "cert:\LocalMachine\My"

很好,但是证书不受信任,将导致以下错误。这是因为它没有安装在中Trusted Root Certification Authorities

在此处输入图片说明

通过开始解决此问题mmc.exe

然后转到:

文件->添加或删除管理单元->证书->添加->计算机帐户->本地计算机。单击完成。

展开Personal文件夹,您将看到您的localhost证书:

在此处输入图片说明

将证书复制到Trusted Root Certification Authorities - Certificates文件夹中。

最后一步是打开Internet Information Services (IIS) Manager还是简单inetmgr.exe。从那里转到您的站点,选择Bindings...Add...Edit...https从下拉菜单中设置并选择您的证书。

在此处输入图片说明

您的证书现已受信任:

在此处输入图片说明


9
这应该是公认的答案!有用!如果您弄混了本地主机和受信任的证书。确保删除所有旧的本地主机证书(通过mmc控制台和IIS(受管最多的服务器)
Tuan Jinn

谢谢!关于该主题的SO解答和博客文章很多,但是关于证书信任问题的讨论很少。提示:也许您应该解释为什么不使用默认的SSL端口443?我猜这是因为该端口经常被其他进程占用。
HoffZ

确实不错的答案,并且在IIS 2020上都可以正常运行。非常感谢!
alessandrocb

也适用于主机文件中的别名
Zef

52

您可以使用PowerShell通过new-selfsignedcertificate cmdlet生成自签名证书:

New-SelfSignedCertificate -DnsName "localhost" -CertStoreLocation "cert:\LocalMachine\My"

注意:不推荐使用makecert.exe。

Cmdlet参考:https : //technet.microsoft.com/itpro/powershell/windows/pkiclient/new-selfsignedcertificate


这应该是2017
。– Tormod Haugene

1
对于那些不了解如何安装结果证书的人,请按照此视频中的步骤操作,对我来说很有效!youtube.com/watch?v=y4uKPUFmSZ0
埃里克·布朗

6
密钥和crt文件存储在哪里?
woojoo666

1
@ woojoo666带有-KeyLocation标志的您可以指定位置。
hamid

46

在这个问题上花了很多时间后,我发现每当遵循有关使用IIS制作自签名证书的建议时,我发现“颁发给”和“颁发者”是不正确的。SelfSSL.exe是解决此问题的关键。以下网站不仅提供了逐步制作自签名证书的方法,而且还解决了“颁发给”和“颁发者”问题。是我发现的用于制作自签名证书的最佳解决方案。如果您希望以视频形式查看相同的教程,请单击此处

SelfSSL的示例用法如下所示:

SelfSSL /N:CN=YourWebsite.com / V:1000 / S:2

SelfSSL /?将提供带有解释的参数列表。


RobBagby.com的文章对我来说非常合适。好找到亨利。
cymorg

超级!该视频质量较差,但具有一切所需的内容。
tonco

2
到robbagby站点的链接已死。看到我对CodeCowboyOrg制作的2个高质量youtube教程的回答
Moses Machua,

编辑答案以链接到robbagby.com上文章的Wayback存档。
Prometheus

23

如果您试图创建一个可以让您离开的自签名证书,http://localhost/mysite 那么这是一种创建证书的方法

makecert -r -n "CN=localhost" -b 01/01/2000 -e 01/01/2099 -eku 1.3.6.1.5.5.7.3.1 -sv localhost.pvk localhost.cer
cert2spc localhost.cer localhost.spc
pvk2pfx -pvk localhost.pvk -spc localhost.spc -pfx localhost.pfx

http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/32bc5a61-1f7b-4545-a514-a11652f11200


2
我的证书在哪里:o不在C:\ Windows \ system32中
EaterOfCode 2012年

2
顺便说一句,可以通过Visual Studio命令提示符使用makecert.exe工具,以供将来的读者使用。您也可以使用Internet信息服务(IIS)资源工具包工具并安装SelfSSL 1.0。microsoft.com/downloads/en/...
atconway

3
快速解答虽然很棒,但并不总是有帮助。我在IIS7中看到“无法将证书用作SSL服务器证书”的错误。Op还提到了浏览器警告,而不是“我如何创建证书”?
cmroanirgo

您可以省略cert2spc步骤,因为参数同时pvk2pfx -spc 接受 .spc和.cer
abatishchev 2013年

1
@EaterOfCode矿山位于C:\ Windows \ SysWOW64
Bay Sola

10

我会推荐Pluralsight用于创建自签名证书的工具:http ://blog.pluralsight.com/selfcert-create-a-self-signed-certificate-interactively-gui-or-programmatically-in-net

将您的证书设置为.pfx并将其导入IIS。并将其添加为受信任的根证书颁发机构。


1
在尝试了各种PowerShell“魔术”和其他无法使用的东西之后,Pluralsight的工具在30秒内为我生成了一个工作脚本,其中包括吃披萨所需的时间(+下载和提取工具,我的意思是)。由于我仍在这台旧笔记本电脑上运行Windows 7,因此,这对我来说是完美的解决方案,谢谢!
阿德(Ade)

1

是的,没有。自签名证书导致该警告消息,因为该证书不是由受信任的证书颁发机构签名的。您可以考虑使用一些选项来删除本地计算机上的此警告。有关详细信息,请参阅此问题的最高解答:

要使Internet Explorer 8接受自签名证书,我需要怎么做?

希望这可以帮助!


编辑:

抱歉,最初我不知道您被限制在localhost。您可以尝试按照下面的链接上的说明“使用正确的通用名称生成自签名证书”。

http://www.sslshopper.com/article-how-to-create-a-self-signed-certificate-in-iis-7.html


否,警告消息存在,因为URL(localhost)与在计算机名下颁发的证书名不匹配。如果我切换到mymachinename,那么我不会收到错误消息。不幸的是,出于不影响问题的原因,我必须使用localhost而不是计算机名。
克里斯


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.