如何为 localhost 创建自签名证书?

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

是否有办法为“ localhost”创建一个自签名的证书以避免此警告?

304710 次浏览

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

如要 Internet Explorer 8接受自签证明书,我需要做些什么?

希望这个能帮上忙!


编辑:

对不起,我一开始并不知道您被限制为 localhost。您可以尝试按照以下链接中的说明“使用正确的通用名生成自签名证书”

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

如果您试图创建一个自签名证书,让您去 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

在这个问题上花费了大量时间之后,我发现每当我按照使用 IIS 制作自签名证书的建议时,我都会发现“发给”和“发给”是不正确的。SelfSSL.exe 是解决这个问题的关键。下面的网站不仅提供了一种逐步制作自签名证书的方法,而且解决了签发人和签发人的问题。给你是我找到的制作自签名证书的最佳解决方案。如果你喜欢看同样的教程在视频形式 点击这里

使用 SelfSSL 的示例如下所示:

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

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

虽然这篇文章被贴上了 Windows 的标签,但是我在其他地方没有看到关于 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中,双击这个新的本地主机证书。展开“信任”旁边的箭头并选择“始终信任”。Chrome 和 Safari 现在应该相信这个证书了。例如,如果您想在 node.js 中使用这个 cert:

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);

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

将您的证书设置为. pfx 并将其导入到 IIS 中,并将其添加为可信的根证书授权机构。

您可以使用 PowerShell 生成带有新的自签名证书 cmdlet 的自签名证书:

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

注意: 不推荐 makecert.exe。

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

由于这个问题被标记为 IIS,我找不到一个关于如何获得可信证书的好答案,我将就此给出我的意见:

首先使用来自 PowerShell 的@Aurirahimzadeh 的命令作为管理员:

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

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

enter image description here

通过启动 mmc.exe解决这个问题。

然后转到:

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

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

enter image description here

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

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

enter image description here

您的证书现在受信任:

enter image description here

如果您正在使用 VisualStudio,有一种简单的方法可以使用 IISExpress在这里解释设置和启用 SSL

你可以试试 mkcert。

安装 mkcert

在 LAN (局域网)中,我们有一台服务器计算机,这里命名为 xhost,运行 Windows10,IIS 作为 WebServer 被激活。我们必须通过像谷歌浏览器这样的浏览器访问这台计算机,不仅要从 本地主机通过服务器本身的 https://localhost/ ,而且还要从局域网内的其他主机通过网址 https://Xhost/:


https://localhost/
https://xhost/
https://xhost.local/
...

通过这种访问方式,我们在这里没有完全限定的域名,只有本地计算机名 xhost。

或者来自 WAN:


https://dev.example.org/
...

您应该将 xhost 替换为您真正的本地计算机名。

以上任何一种解决方案都不能使我们满意。经过几天的尝试,我们采用了解决方案 openssl.exe。我们使用两个证书-一个 CA (自我认证的 Authority 证书) RootCAcrt 和由前者认证的 xhost.crt。我们用 PowerShell。

1. 创建并切换到安全目录:

cd C:\users\so\crt

2. Generate RootCA.pem, RootCA.key & RootCA.crt as self-certified Certification Authority:


openssl req -x509 -nodes -new -sha256 -days 10240 -newkey rsa:2048 -keyout RootCA.key -out RootCA.pem -subj "/C=ZA/CN=RootCA-CA"
openssl x509 -outform pem -in RootCA.pem -out RootCA.crt

3. 请求认证: xhost.key,xhost.csr:

C: Country
ST: State
L: locality (city)
O: Organization Name
Organization Unit
CN: Common Name


    


openssl req -new -nodes -newkey rsa:2048 -keyout xhost.key -out xhost.csr -subj "/C=ZA/ST=FREE STATE/L=Golden Gate Highlands National Park/O=WWF4ME/OU=xhost.home/CN=xhost.local"

4. 获得 RootCA.pem 认证的 xhost.crt:


openssl x509 -req -sha256 -days 1024 -in xhost.csr -CA RootCA.pem -CAkey RootCA.key -CAcreateserial -extfile domains.ext -out xhost.crt

Extfile domains.ext 文件定义了许多访问服务器网站的安全方法:

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = localhost
DNS.2 = xhost
DNS.3 = xhost.local
DNS.4 = dev.example.org
DNS.5 = 192.168.1.2

5. 创建 xhost.pfx PKCS # 12,

组合私有 xhost.key 和证书 xhost.crt,允许导入到 iis。此步骤要求输入密码,请按[返回]键(无密码)使其为空:


openssl pkcs12 -export -out xhost.pfx -inkey xhost.key -in xhost.crt

6. 在 iis10中导入 xhost.pfx

并重新启动 IIS 服务。

IIS10 Gestionnaire des services Internet (IIS) (%windir%\system32\inetsrv\InetMgr.exe)

enter image description here

enter image description here

7. 用端口443上的 Xhost.local证书绑定 ssl。

enter image description here

重新启动 IIS 服务。

8. 将 RootCAcrt 导入 受信任的根证书颁发机构

通过谷歌浏览器在任何电脑,将访问该网站的 https://xhost/。

谷歌 Chrome/.../设置 /[高级]/隐私和安全/安全/管理证书

导入 RootCAcrt

enter image description here

浏览器将显示这个有效的证书树:


RootCA-CA
|_____ xhost.local

enter image description here

无证书错误将出现通过局域网,甚至通过广域网通过 https://dev.example.org

enter image description here

下面是从零开始生成所有必需的证书文件的完整 Powershell 脚本 Socrt.ps1文件:


#
# Generate:
#   RootCA.pem, RootCA.key RootCA.crt
#
#   xhost.key xhost.csr xhost.crt
#   xhost.pfx
#
# created  15-EEC-2020
# modified 15-DEC-2020
#
#
# change to a safe directory:
#


cd C:\users\so\crt


#
# Generate RootCA.pem, RootCA.key & RootCA.crt as Certification Authority:
#
openssl req -x509 -nodes -new -sha256 -days 10240 -newkey rsa:2048 -keyout RootCA.key -out RootCA.pem -subj "/C=ZA/CN=RootCA-CA"
openssl x509 -outform pem -in RootCA.pem -out RootCA.crt


#
# get RootCA.pfx: permitting to import into iis10: not required.
#
#openssl pkcs12 -export -out RootCA.pfx -inkey RootCA.key -in RootCA.crt


#
# get xhost.key xhost.csr:
#   C: Country
#   ST: State
#   L: locality (city)
#   O: Organization Name
#   OU: Organization Unit
#   CN: Common Name
#
openssl req -new -nodes -newkey rsa:2048 -keyout xhost.key -out xhost.csr -subj "/C=ZA/ST=FREE STATE/L=Golden Gate Highlands National Park/O=WWF4ME/OU=xhost.home/CN=xhost.local"


#
# get xhost.crt certified by RootCA.pem:
# to show content:
#   openssl x509 -in xhost.crt -noout -text
#
openssl x509 -req -sha256 -days 1024 -in xhost.csr -CA RootCA.pem -CAkey RootCA.key -CAcreateserial -extfile domains.ext -out xhost.crt


#
# get xhost.pfx, permitting to import into iis:
#
openssl pkcs12 -export -out xhost.pfx -inkey xhost.key -in xhost.crt


#
# import xhost.pfx in iis10 installed in xhost computer (here localhost).
#

要为 Windows 安装 openSSL,请访问 https://slproweb.com/products/Win32OpenSSL.html

生成本地主机证书的最快方法。

openssl req -x509 -out localhost.crt -keyout localhost.key \
-newkey rsa:2048 -nodes -sha256 \
-subj '/CN=localhost' -extensions EXT -config <( \
printf "[dn]\nCN=localhost\n[req]\ndistinguished_name = dn\n[EXT]\nsubjectAltName=DNS:localhost\nkeyUsage=digitalSignature\nextendedKeyUsage=serverAuth")

下面是我为 Windows 上的 localhost 获得有效证书所做的工作:

  1. 下载 mkcert 可执行文件(https://github.com/FiloSottile/mkcert/releases)并将其重命名为 mkcert.exe
  2. 运行“ mkcert-install”
  3. 打开 Windows 证书管理器(certmgr.msc)
  4. 右键单击“受信任的根证书颁发机构”-> 导入
  5. 从 C 导入 Root cert (rootCA.pem) : Users [ username ] AppData Local mkcert
  6. 为指定的域创建 * . p12证书: “ mkcert-pkcs12[ name1][ name2]”
  7. 将 * . p12证书重命名为 * . pfx
  8. 在 IIS-> 服务器证书-> 在“ Personal”组中导入(pfx)[缺省密码: “ changeit”]
  9. 为默认网站分配证书(绑定-> https (443)-> 修改-> SSL 证书)