我已经为localhostCN创建了一个自签名的SSL证书。正如预期的那样,Firefox在最初抱怨后接受了这个证书。然而,Chrome和IE拒绝接受它,即使在将证书添加到Trusted Roots下的系统证书存储之后。尽管当我在Chrome的HTTPS弹出窗口中单击“查看证书信息”时,证书被列为正确安装,但它仍然坚称证书不可信。

我该怎么做才能让Chrome接受证书并停止抱怨?


当前回答

对于MacOS上的Chrome,如果您准备了证书:

退出Chrome(cmd+Q)。启动Keychain Access应用程序并打开“证书”类别。将证书文件拖到Keychain Access窗口上,然后键入证书文件的密码。双击证书并展开“信任”列表。在“使用此证书时”行中,选择“始终信任”关闭此内容并键入密码。启动Chrome并清除所有缓存。检查一切是否正常。

其他回答

我刚刚在我的chrome中启用了允许不安全的localhost标志,就这样。

步骤。

类型chrome://flags在您的铬标签中。搜索允许不安全的本地主机标志并启用它。重新启动chrome浏览器。

现在,您将不会看到不安全的警告https://localhost地点。

在Mac上,您可以通过执行以下操作创建一个在系统级别完全受Chrome和Safari信任的证书:

# create a root authority cert
./create_root_cert_and_key.sh

# create a wildcard cert for mysite.com
./create_certificate_for_domain.sh mysite.com

# or create a cert for www.mysite.com, no wildcards
./create_certificate_for_domain.sh www.mysite.com www.mysite.com

上面使用了以下脚本和支持文件v3.ext,以避免主题替代名称丢失错误

如果您想使用自己的根权限创建一个完全受信任的新的自签名证书,可以使用这些脚本。

创建root_cert_and_key.sh

#!/usr/bin/env bash
openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem

为域.sh创建证书

#!/usr/bin/env bash

if [ -z "$1" ]
then
  echo "Please supply a subdomain to create a certificate for";
  echo "e.g. www.mysite.com"
  exit;
fi

if [ ! -f rootCA.pem ]; then
  echo 'Please run "create_root_cert_and_key.sh" first, and try again!'
  exit;
fi
if [ ! -f v3.ext ]; then
  echo 'Please download the "v3.ext" file and try again!'
  exit;
fi

# Create a new private key if one doesnt exist, or use the xeisting one if it does
if [ -f device.key ]; then
  KEY_OPT="-key"
else
  KEY_OPT="-keyout"
fi

DOMAIN=$1
COMMON_NAME=${2:-*.$1}
SUBJECT="/C=CA/ST=None/L=NB/O=None/CN=$COMMON_NAME"
NUM_OF_DAYS=825
openssl req -new -newkey rsa:2048 -sha256 -nodes $KEY_OPT device.key -subj "$SUBJECT" -out device.csr
cat v3.ext | sed s/%%DOMAIN%%/"$COMMON_NAME"/g > /tmp/__v3.ext
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days $NUM_OF_DAYS -sha256 -extfile /tmp/__v3.ext 

# move output files to final filenames
mv device.csr "$DOMAIN.csr"
cp device.crt "$DOMAIN.crt"

# remove temp file
rm -f device.crt;

echo 
echo "###########################################################################"
echo Done! 
echo "###########################################################################"
echo "To use these files on your server, simply copy both $DOMAIN.csr and"
echo "device.key to your webserver, and use like so (if Apache, for example)"
echo 
echo "    SSLCertificateFile    /path_to_your_files/$DOMAIN.crt"
echo "    SSLCertificateKeyFile /path_to_your_files/device.key"

v3.ext版本

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
    
[alt_names]
DNS.1 = %%DOMAIN%%

另一步-如何在Chrome/Safari中完全信任自签名证书

若要在Chrome和Safari中完全信任自签名证书,您需要将新的证书颁发机构导入Mac。要做到这一点,请遵循以下说明或mitmproxy网站上有关此一般流程的更详细说明:

您可以在命令行使用以下两种方法之一执行此操作,该命令将提示您输入密码:

$ sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain rootCA.pem

或使用Keychain Access应用程序:

打开钥匙链访问在“钥匙链”列表中选择“系统”在“类别”列表中选择“证书”选择“文件|导入项目…”浏览到上面创建的文件“rootCA.pem”,选择它,然后单击“打开”在“证书”列表中选择新导入的证书。单击“i”按钮,或右键单击证书,然后选择“获取信息”展开“信任”选项将“使用此证书时”更改为“始终信任”关闭对话框,系统将提示您输入密码。关闭并重新打开使用目标域的所有选项卡,它将被安全加载!

另外,如果您需要java客户端信任证书,可以通过将证书导入到java密钥库来实现。注意,如果证书已经存在,这将从密钥库中删除证书,因为它需要在情况发生变化时更新它。当然,它只对正在导入的证书执行此操作。

import_certs_in_current_folder_into_java_keystore.sh

KEYSTORE="$(/usr/libexec/java_home)/jre/lib/security/cacerts";

function running_as_root()
{
  if [ "$EUID" -ne 0 ]
    then echo "NO"
    exit
  fi

  echo "YES"
}

function import_certs_to_java_keystore
{
  for crt in *.crt; do 
    echo prepping $crt 
    keytool -delete -storepass changeit -alias alias__${crt} -keystore $KEYSTORE;
    keytool -import -file $crt -storepass changeit -noprompt --alias alias__${crt} -keystore $KEYSTORE
    echo 
  done
}

if [ "$(running_as_root)" == "YES" ]
then
  import_certs_to_java_keystore
else
  echo "This script needs to be run as root!"
fi

在受信任的根CA存储中添加CA证书。转到chrome并启用此标志!

chrome://flags/#allow-不安全的本地主机

最后,只需使用*.me域或任何有效的域,如*.com和*.net,并将它们保存在主机文件中。对于我的本地设备,我使用*.me或*.com,主机文件维护如下:

添加到主机。C: /windows/system32/drivers/etc/hosts127.0.0.1下一页

注意:如果在执行此操作时浏览器已打开,则错误将继续显示。因此,请关闭浏览器并重新启动。更好的办法是,隐姓埋名,或者立即开始新的疗程。

修复Windows上的Chrome。

首先,您需要导出证书。

在浏览器中找到url。url的“https”段将为用红线划掉,左侧将有一个锁定符号。右键单击划掉的“https”段。您将看到一个包含各种信息的信息窗口单击“详细信息”。导出证书,按照说明接受默认设置。

要导入

转到Chrome设置单击“高级设置”在HTTPS/SSL下单击“管理证书”转到“受信任的根证书颁发机构”单击“导入”将出现一个弹出窗口,询问您是否要安装此证书。单击“是”。

对于测试环境

在启动chrome时,可以使用--ignore证书错误作为命令行参数(在Ubuntu上使用28.0.1500.52版本)。

这将导致它忽略错误并在没有警告的情况下连接。如果您已经运行了一个版本的chrome,则需要在从命令行重新启动之前关闭它,否则它将打开一个新窗口,但忽略参数。

我将Intellij配置为在进行调试时以这种方式启动chrome,因为测试服务器从来没有有效的证书。

不过,我不建议像这样正常浏览,因为证书检查是一项重要的安全功能,但这可能对某些人有所帮助。