Apache 表示证书对 192.168.0.44 无效,但对 192.168.0.44 有效

Apache 表示证书对 192.168.0.44 无效,但对 192.168.0.44 有效

我在为由 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.44hello.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 的域名创建证书。

相关内容