我在为 Apache 提供服务的网站创建 SSL 证书时遇到问题。当我https://192.168.0.44
通过 FireFox 访问时,收到错误消息:
Websites prove their identity via certificates. Firefox does not trust this site because it uses a certificate that is not valid for 192.168.0.44. The certificate is only valid for 192.168.0.44.
Error code: SSL_ERROR_BAD_CERT_DOMAIN
以下是重现该问题的步骤。
要求:
- 一台 IP 地址上装有 Ubuntu 操作系统的计算机
192.168.0.44
。 - 任何地址上装有 Windows 的一台计算机
192.168.0.*
。
脚步:
我转到 Ubuntu 机器。
我运行这个命令:
mkdir -p /etc/certs/test;
/etc/certs/test/entity.cnf
我创建包含以下内容的文件:
[req]
distinguished_name = req_distinguished_name
x509_extensions = v3_req
prompt = no
[req_distinguished_name]
C = CA
ST = ON
L = Windsor
O = Ankle
OU = Hello
CN = 192.168.0.44
[v3_req]
keyUsage = critical, digitalSignature, keyAgreement
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = 192.168.0.44
我创建一个名为/etc/certs/test/make-certs.sh
以下内容的文件。
#!/bin/bash
ORG="ABTEST"
CN="abtest"
certdir="/etc/certs/test"
mkdir -p $certdir;
cd $certdir;
## Create certificate authority
openssl genrsa -out $certdir/ca.key 2048
openssl req -x509 -sha256 -nodes -key $certdir"/ca.key" -subj "/C=CA/ST=ON/O="$ORG"/CN="$CN -days 3650 -out $certdir"/ca.crt"
## Create entity certificate
# Private Key
openssl genrsa -out $certdir/entity.key 2048
# CSR
openssl req -new -sha256 -nodes -key $certdir"/entity.key" -config $certdir"/entity.cnf" -out $certdir"/entity.csr"
# Certificate
openssl x509 -req -in $certdir"/entity.csr" -CA $certdir"/ca.crt" -CAkey $certdir"/ca.key" -CAcreateserial -out $certdir"/entity.crt" -days 500 -sha256 -extensions v3_req -extfile $certdir"/entity.cnf"
我运行命令:
./make-certs.sh
我用这个命令安装 Apache2。
apt-get install -y apache2;
我创建了一个/etc/apache2/sites-available/default-ssl.conf
包含以下内容的:
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile /etc/certs/test/entity.crt
SSLCertificateKeyFile /etc/certs/test/entity.key
SSLCACertificateFile /etc/certs/test/ca.crt
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
</VirtualHost>
</IfModule>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
我运行这些命令:
a2enmod ssl;
a2ensite default-ssl.conf;
systemctl restart apache2;
我运行这个命令:
cat /etc/certs/test/ca.crt
我复制输出。
我转到 Windows 计算机。
我将剪贴板内容粘贴到名为 的 txt 文件中ca.crt
。
我转到 FireFox 设置并ca.crt
作为证书颁发机构导入。
我https://192.168.0.44
用FireFox访问。
我看到这个问题开头提到的错误消息。
但是,如果我重复上述步骤但仅更改 3 件事,则不会收到此错误:
在我的 Ubuntu 机器上,我将所有实例替换
192.168.0.44
为hello.test.com
/etc/certs/test/entity.cnf
在我的 Windows 计算机上,我将这一行添加
192.168.0.44 hello.test.com
到文件中C:\Windows\System32\drivers\etc\hosts
。在我的 Windows 计算机上,我
https://hello.test.com
使用 FireFox 网络浏览器进行访问。
经过这 3 项更改后,FireFox 将显示一个绿色的锁定图标,并表示我的 SSL 证书的一切都很完美。
如何解决我的情况,以便192.168.0.44
可以使用可验证且可信的证书?
附加说明:
https://192.168.0.44
这就是当我访问Apache 使用证书时FireFox 所说的内容192.168.0.44
您的替代名称不正确。它应该是
顺便说一句,证书永远不会为 IP 地址创建,也永远不会被信任。您可以基于域名创建证书,该域名使用 dns 链接到 IP。