我在为由 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
以下是重现该问题的步骤。
要求:
- 一台安装了 Ubuntu 操作系统的计算机,其 IP 地址为
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
答案1
您的替代名称不正确。应该是
[ alt_names ]
IP.1 = your_ip_address
顺便说一句,证书永远不会为 IP 地址创建,也永远不会被信任。您可以根据使用 DNS 链接到 IP 的域名创建证书。