生成

生成

我正在学习证书和 HTTPS,但 4 天后,我不知道如何设置才能获得信任。在我的实验室环境中,我有一台具有 CA 角色的 Windows 服务器。

之前我为我的服务器安装了 VM-Dell OpenManage。它有一个用于请求的图形界面和一个用于 HTTPS 访问的导入证书。我成功生成了证书签名请求并从我的 Windows CA 服务器获取了证书 (https://xxxx/certsrv/) 不到2分钟就完成了。

我想我可以在 apache2 网络服务器 (Ubunut20.04) 上尝试一下。但是,现在我陷入困境,仍然不知道如何让它工作。

1.目前(在~50 openssl req 之后)我使用以下命令请求证书:

openssl req -new -newkey rsa:2048 -nodes -addext “subjectAltName = DNS:*.mydomain.local” -keyout serverkey.key -out serverreq.csr

2.我从浏览器打开了我的 Windows CA 服务器https://xxxx/certsrv/并申请证书-->高级证书申请-->粘贴serverreq.csr内容-->WebserverTemplate。下载证书。

3.回到Linux,我的conf文件(/etc/apache2/sites-avaliable/mysite.conf):看起来像这样。

<VirtualHost _default_:443>
        Protocols h2 http/1.1
                ServerName  mysite.local
                ServerAlias www.mysite.local
                DocumentRoot /var/www/html/mysite
                SSLEngine on
                SSLCertificateFile      /etc/ssl/certandkey/myservercert.crt
                SSLCertificateKeyFile   /etc/ssl/certandkey/myserverkey.key
</VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
<VirtualHost *:80>
    ServerName mysite.local
    Redirect / https://mysite.local/
</VirtualHost>

我需要配置# 服务器证书链:和 # 证书颁发机构 (CA):

Apache 正在运行

4. 此后,如果我打开网页,它会显示

Certificate - missing
This site is missing a valid, trusted certificate (net::ERR_CERT_COMMON_NAME_INVALID).

但如果我打开 OpenManage 它会说

Certificate - valid and trusted
The connection to this site is using a valid, trusted server certificate issued by mydomain-DC-CA

两个证书都来自同一个 Windows CA 服务器。

5.我尝试配置 /etc/ssl/openssl.cnf,但我真的不知道该怎么做。如果我编辑某些内容,则什么都不起作用。

我的配置有什么问题,我该如何配置?有没有什么好的教程?90% 的时间谷歌只显示自签名证书和浏览器魔法。但我想用 Windows CA 来配置它。

感谢帮助

对不起我的英语不好。

答案1

生成

您可以使用小型扩展文件 (utf-8) 来预设所需的条目,并更轻松地生成 CSR。如果不是 ASCII,DNS 条目必须是 punycode。(https://www.rfc-editor.org/rfc/rfc3492

[req]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = dn
req_extensions = ext

[ ext ]
subjectKeyIdentifier=hash
keyUsage=digitalSignature, keyEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = mysite.local
DNS.2 = www.mysite.local

[ dn ]
O=ACME
OU=TESTING
[email protected]
CN = mysite.local

您可以将其保存为sslcert.cnf示例。

关于通配符的备注

您可以使用通配符,如 *.example.com。它们仅在一个级别上起作用。foo.bar.example.com 不会被 *.example.com 覆盖。此外,*example.com 不起作用,星号必须位于其自己的域组件中。

然后,如果您还没有私钥:

openssl req -nodes -newkey rsa:2048 -keyout sslcert.key -out sslcert.csr -config sslcert.cnf -utf8

或者如果你已经有私钥sslcert.key

openssl req -key sslcert.key -out sslcert.csr -config sslcert.cnf -utf8

sslcert.csr将是输出(也是sslcert.key第一个示例中的输出)

您还可以添加 subjectAltName 部分-addext

openssl req -nodes -newkey rsa:2048 -keyout sslcert.key -out sslcert.csr -addext 'subjectAltName = DNS:example.com' -utf8

姓名检查

您可以使用 openssl 命令检查证书是否可能与您在浏览时使用的域匹配

openssl x509 -in sslcert.crt -noout -checkhost example.com

历史上,CN 条目在主题用于 SSL 主机名检查。它仍然按惯例用其中一个域填充,但例如 Chrome 不会接受不使用主题备用名称 (SAN) 部分的证书。这也是用于多名称证书的部分(即使您只使用带有和不带有 www 的域,也已经是多名称证书)。根据 CA/浏览器规范,您在 CN 中设置的任何名称也必须包含在 altnames 部分中。

您可以在输出中看到这些

openssl x509 -text -noout -in cert.crt | grep -F 'Subject Alternative Name:' -A 1

不幸的是,没有现成的针对 SAN 部分的输出开关。

看起来像:

            X509v3 Subject Alternative Name:
                DNS:cert.local, DNS:cert.example.com

Web 服务器检查

要查看您的网络服务器是否返回您设置的证书和链(如果有中间件),您还可以使用 openssl 命令行(可能来自网络服务器计算机本身)。

openssl s_client -connect example.com:443 -servername example.com -showcerts

如果您使用的 CA 未包含在执行 openssl 命令的机器上,您将收到验证错误,但至少您可以看到返回的证书。

在连接中你也可以使用 ip 地址,所以如果网络服务器在同一台机器上,并且也在环回上监听,你可以说

openssl s_client -connect localhost:443 -servername example.com -showcerts

-servername如果 Web 服务器在端口 443 上有多个虚拟主机,则用于选择正确的虚拟主机。

相关内容