AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1152605
Accepted
John
John
Asked: 2024-01-31 06:23:10 +0800 CST2024-01-31 06:23:10 +0800 CST 2024-01-31 06:23:10 +0800 CST

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

  • 772

我在为 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 在此输入图像描述

apache-2.2
  • 1 1 个回答
  • 27 Views

1 个回答

  • Voted
  1. Best Answer
    Turdie
    2024-01-31T06:38:11+08:002024-01-31T06:38:11+08:00

    您的替代名称不正确。它应该是

    [ alt_names ]
    IP.1 = your_ip_address
    

    顺便说一句,证书永远不会为 IP 地址创建,也永远不会被信任。您可以基于域名创建证书,该域名使用 dns 链接到 IP。

    • 1

相关问题

  • Apache Django Mod_Wsgi - 自动重新加载应用程序

  • Apache:对多个虚拟主机使用相同的目录指令

  • Apache 上的子域不工作 - 找不到服务器

  • PHP 作为 CGI 还是 Apache 模块?

  • 避免将某些丢失的文件记录到 Apache2 错误日志中

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve