[ req ]
default_bits = 4096
distinguished_name = req_distinguished_name
req_extensions = req_ext
[ req_distinguished_name ]
countryName = Country Name (2 letter code)
stateOrProvinceName = State or Province Name (full name)
localityName = Locality Name (eg, city)
organizationName = Organization Name (eg, company)
commonName = Common Name (e.g. server FQDN or YOUR name)
commonName_max = 64
[ req_ext ]
subjectAltName = @alt_names
[alt_names]
DNS.1 = localhost
# 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
#!/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=999
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"
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
3
我不得不在macosx上调整Chrome启动器并添加到脚本下面 . 保存如下;
/ Applications / Google \ Chrome.app/Contents/MacOS/Chrome.command
正如错误名称this comment和this question暗示的那样,问题在于证书中声明的域名 . When prompted for the "Common Name" while generating the certificate, I had to enter the domain name 我正在使用访问该网站(在我的情况下为 localhost ) . 我使用 chrome://restart 重启了Chrome,终于对这个新证书感到满意了 .
1
如果您是 on a mac 并且没有看到导出选项卡或如何获取证书,这对我有用:
点击https://之前的锁定
转到"Connection"标签
点击“证书信息”
现在你应该看到这个:
将小证书图标拖到您的桌面(或任何地方) .
双击下载的.cer文件,将其导入您的钥匙串并打开Keychain Access到您的证书列表 .
In some cases, this is enough and you can now refresh the page.
除此以外:
双击新添加的证书 .
在信任下拉列表下将"When using this certificate"选项更改为"Always Trust"
30 回答
For a test environment
启动chrome时可以使用
--ignore-certificate-errors
作为命令行参数(在Ubuntu上使用版本28.0.1500.52) .这将导致它忽略错误并在没有警告的情况下连接 . 如果您已经运行了chrome版本,则需要在从命令行重新启动之前关闭它,否则它将打开一个新窗口但忽略这些参数 .
我将Intellij配置为在进行调试时以这种方式启动chrome,因为测试服务器从不拥有有效的证书 .
我不建议像这样进行正常浏览,因为证书检查是一项重要的安全功能,但这可能对某些人有所帮助 .
WINDOWS JUN/2017 Windows Server 2012
我跟着@Brad Parks的回答 . 在Windows上,您应该在受信任的根证书颁发机构存储中导入rootCA.pem .
我做了以下步骤:
其中v3.ext是:
然后,在我的情况下,我有一个自托管的Web应用程序,所以我需要绑定证书与IP地址和端口,证书应该在我的商店与私人密钥信息,所以我导出到pfx格式 .
使用mmc控制台(文件/添加或删除管理单元/证书/添加/计算帐户/本地计算机/确定)我在个人存储中导入了pfx文件 .
后来我用这个命令绑定证书(你也可以使用HttpConfig工具):
certhash =证书Thumprint
appid = GUID(您的选择)
首先,我尝试以不同的方式在受信任的根证书颁发机构上导入证书“device.crt”,但我仍然得到相同的错误:
但我意识到我应该导入root权限证书而不是域证书 . 所以我使用mmc控制台(文件/添加或删除管理单元/证书/添加/计算帐户/本地计算机/确定)我在受信任的根证书颁发机构存储中导入了rootCA.pem .
重启Chrome和etvoilà它有效 .
使用localhost:
或者使用IP地址:
我唯一无法实现的是,它有过时的密码(图片上的红色方块) . 在这一点上,对此表示赞赏 .
使用makecert,无法添加SAN信息 . 使用New-SelfSignedCertificate(Powershell),您可以添加SAN信息,它也可以使用 .
我自己修复了这个问题,而没有在任何具有适当SSL认证的浏览器上更改设置 . 我使用mac,因此需要对我的ssl认证进行钥匙串更新 . 我必须在chrome的ssl认证中添加主题alt名称才能接受它 . 截至今天,这是针对Chrome版本号:62.0.3202.94
我的例子很容易使用命令和配置文件:
添加这些文件,此示例都在一个根目录中
ssl.conf中
运行命令创建认证:
对于macs,仅添加可信认证(必需):
对于Windows,您必须找到如何在本地独立验证我们的ssl证书 . 我不使用Windows . 对不起windows个人和女孩们 .
我正在使用带有express.js的node.js服务器,只需要我的密钥和认证,如下所示:
app.js
我可能会在将来为其他后端帧做这个,所以我可以在将来为其他人更新这个例子 . 但这是我在Node.js中解决该问题的方法 . 清除浏览器缓存并在https://上运行您的应用
以下是在Mac用户的Node.js服务器上运行https://localhost的示例:
https://github.com/laynefaler/Stack-Overflow-running-HTTPS-localhost
快乐的编码!
我在kellen的答案之后取得了成功,并获得了至关重要的update from Toby J,但必须进行此修订:
创建自签名证书时,必须将新的
subjectAltName
字段放在v3_ca
扩展名下,而不是v3_req
. 我将/etc/ssl/openssl.conf
复制到临时文件,然后在[ v3_ca ]
下添加了一行subjectAltName = DNS:*.example.com
. 然后将该文件传递给cert创建命令,例如并按照kellen's更新了步骤 .
UPDATE FOR CHROME 58+ (RELEASED 2017-04-19)
自Chrome 58起,仅使用
commonName
is being removed标识主机 . 进一步了解discussion here和bug tracker here . 过去,subjectAltName
仅用于多主机证书,因此某些内部CA工具可能不包含它们 .If your self-signed certs worked fine in the past 但突然开始在Chrome 58中产生错误,这就是原因 .
因此,无论您使用哪种方法生成自签名证书(或由自签名CA签名的证书),请确保服务器的证书包含带有正确的
DNS
和/或IP
条目/条目的subjectAltName
,即使它仅用于一个主机 .对于openssl,这个表示your OpenSSL config(Ubuntu上的
/etc/ssl/openssl.cnf
)应该与单个主机具有类似的内容:或多个主机:
在Chrome的证书查看器(已移至F12下的"Security"标签页)中,您应该会在
Extensions
下将其列为Certificate Subject Alternative Name
:这篇文章已经充满了回复,但我根据其他一些答案创建了一个 bash script ,以便更容易在Chrome中有效 generate a self-signed TLS certificate (在
Chrome 65.x
中测试过) . 希望它对其他人有用 .安装( and trust )证书后,不要忘记重启Chrome(
chrome://restart
)值得一试的另一个工具是CloudFlare的
cfssl
工具包:2017-06-27最新方法:
然后,将yoursite.crt和yoursite.key添加到你的nginx conf中 .
来自:https://github.com/webpack/webpack-dev-server/issues/854
这对我有用:
使用Chrome,通过HTTPS点击服务器上的页面并继续浏览红色警告页面(假设您尚未执行此操作) .
打开
Chrome Settings > Show advanced settings > HTTPS/SSL > Manage Certificates
.单击
Authorities
选项卡并向下滚动以在您为证书提供的组织名称下查找证书 .选择它,单击编辑( NOTE :在最近版本的Chrome中,按钮现在是"Advanced"而不是"Edit"),选中所有框并单击确定 . 您可能需要重新启动Chrome .
您现在应该在页面上获得漂亮的绿色锁定 .
EDIT: 我在新计算机上再次尝试了此操作,并且仅通过继续红色不受信任的证书页面,证书未显示在“管理证书”窗口中 . 我必须做以下事情:
在包含不受信任证书的页面上(
https://
以红色划掉),单击锁定>证书信息 . NOTE: 在较新版本的chrome上,您必须打开Developer Tools > Security
,然后选择View certificate
.单击
Details tab > Export
. 选择PKCS #7, single certificate
作为文件格式 .然后按照我的原始说明进入“管理证书”页面 . 单击
Authorities tab > Import
并选择导出证书的文件,并确保选择PKCS #7, single certificate
作为文件类型 .如果提示认证存储,请选择“受信任的根证书颁发机构”
选中所有框,然后单击“确定” . 重启Chrome .
在Mac上,您可以使用Keychain Access实用程序将自签名证书添加到系统钥匙串,然后Chrome将接受它 . 我在这里找到了分步说明:
Google Chrome, Mac OS X and Self-Signed SSL Certificates
基本上:
双击带有X的锁图标,然后将证书图标拖放到桌面,
打开此文件(以.cer扩展名结尾);这将打开钥匙串应用程序,允许您批准证书 .
当我尝试在浏览器中导入证书时,它对我不起作用...在chrome open Developer Tools> Security中,选择查看证书 . 单击详细信息选项卡并将其导出 .
// LINUX
运行此命令,如果你看到你刚刚导入的文件你很高兴!
// Windows
在左侧选择受信任的根证书颁发机构=>个人 . 单击操作选项卡=>所有操作/导入,然后从浏览器中选择之前导出的文件
别忘了重启chrome !!!
祝好运! ;)
这是不断出现的 - 特别是对于Mac OS X Yosemite上的谷歌浏览器!
值得庆幸的是,我们的一个开发团队今天向我发送了此链接,该方法可靠地工作,同时仍然允许您控制您接受证书的站点 .
https://www.reddit.com/r/sysadmin/comments/3ercx4/chrome_shortcut_past_the_your_connection_is_not/cthporl
jersully帖子:
在Mac上,您可以通过执行以下操作在系统级别创建Chrome和Safari完全信任的证书:
以上使用以下脚本和支持文件v3.ext,以避免主题备用名称丢失错误
如果要使用自己的根权限创建一个完全受信任的新自签名证书,则可以使用这些脚本执行此操作 .
create_root_cert_and_key.sh
create_certificate_for_domain.sh
v3.ext
还有一个步骤 - 如何在Chrome / Safari中完全信任自签名证书
要允许在Chrome和Safari中完全信任自签名证书,您需要将新的证书颁发机构导入Mac . 为此,请遵循这些说明,或有关此一般过程的更详细说明on the mitmproxy website:
打开钥匙串访问
在"Keychains"列表中选择"System"
在"Category"列表中选择"Certificates"
选择"File | Import Items..."
浏览到上面创建的文件"rootCA.pem",选择它,然后单击"Open"
在"Certificates"列表中选择新导入的证书 .
单击"i"按钮,或右键单击证书,然后选择"Get Info"
展开"Trust"选项
将"When using this certificate"更改为"Always Trust"
关闭对话框,系统将提示您输入密码 .
关闭并重新打开正在使用目标域的任何选项卡,它将被安全加载!
作为奖励,如果您需要Java客户端信任证书,您可以通过将证书导入java密钥库来实现 . 请注意,这将从密钥库中删除证书(如果已存在),因为它需要在更改时更新它 . 它当然只对导入的证书执行此操作 .
import_certs_in_current_folder_into_java_keystore.sh
我不得不在macosx上调整Chrome启动器并添加到脚本下面 . 保存如下;
当我使用此脚本启动Chrome时,自签名证书可以正常运行 . 但是 don't browse the web with the browser launched with this script 你不会被告知无效证书!
从Chrome 58开始,由于缺少SAN,我开始在 macOS 上收到证书错误 . 以下是如何再次获取地址栏上的绿色锁定 .
server.crt
导入KeyChain,然后双击证书,展开 Trust ,并选择始终信任刷新Google Chrome中的页面https://domain.dev,以便绿色锁定恢复 .
单击页面上的任意位置并键入BYPASS_SEQUENCE
“
thisisunsafe
”是Chrome版本65的BYPASS_SEQUENCE“
badidea
”Chrome版本62 - 64 .“
danger
”曾用于早期版本的Chrome您不需要查找输入字段,只需键入它即可 . 感觉很奇怪,但它确实有效 .
我在Mac High Sierra上尝试过 .
要仔细检查是否再次更改它,请转至最新的铬Source Code
要查找BYPASS_SEQUENCE,目前它看起来像:
现在他们伪装了,但要看到真正的BYPASS_SEQUENCE,您可以在浏览器控制台中运行以下行 .
我尝试了所有内容以及它的工作原理:导入时,选择正确的类别,即 Trusted Root Certificate Authorities :
(对不起,这是德语,但只需按照图片)
这对我有用 . 见:http://www.robpeck.com/2010/10/google-chrome-mac-os-x-and-self-signed-ssl-certificates/#.Vcy8_ZNVhBc
在地址栏中,单击带有X的小锁 . 这将显示一个小信息屏幕 . 单击“证书信息”按钮 .
单击并将图像拖动到桌面 . 它看起来像一个小证书 .
双击它 . 这将打开Keychain Access实用程序 . 输入您的密码以解锁它 .
确保将证书添加到系统密钥链,而不是登录密钥链 . 点击“始终信任”,即使这似乎没有做任何事情 .
添加完毕后,双击它 . 您可能需要再次进行身份验证 .
展开“信任”部分 .
“使用此证书时,”设置为“始终信任”
我遇到了同样的问题:我已将证书安装到Windows的“受信任的根权限”商店中,Chrome仍拒绝该证书,错误为
ERR_CERT_COMMON_NAME_INVALID
. 请注意,如果证书未在商店中正确安装,则错误为ERR_CERT_AUTHORITY_INVALID
.正如错误名称this comment和this question暗示的那样,问题在于证书中声明的域名 . When prompted for the "Common Name" while generating the certificate, I had to enter the domain name 我正在使用访问该网站(在我的情况下为
localhost
) . 我使用chrome://restart
重启了Chrome,终于对这个新证书感到满意了 .如果您是 on a mac 并且没有看到导出选项卡或如何获取证书,这对我有用:
点击https://之前的锁定
转到"Connection"标签
点击“证书信息”
现在你应该看到这个:
将小证书图标拖到您的桌面(或任何地方) .
双击下载的.cer文件,将其导入您的钥匙串并打开Keychain Access到您的证书列表 .
In some cases, this is enough and you can now refresh the page.
除此以外:
双击新添加的证书 .
在信任下拉列表下将"When using this certificate"选项更改为"Always Trust"
现在重新加载有问题的页面,应该解决问题!希望这可以帮助 .
来自Wolph的编辑
为了使这更容易一些,您可以使用以下脚本(source):
whitelist_ssl_certificate.ssh
:单击URL旁边的小划线锁图标时,您将看到如下所示的框:
单击 Certificate information 链接后,您将看到以下对话框:
它告诉您哪个证书存储是正确的,它是 Trusted Root Certification Authorities 存储 .
您可以使用其他答案中列出的方法之一将证书添加到该商店或使用:
ROOT
是前面提到的证书存储的内部名称 .cert.pem
是这个名字您的自签名证书 .UPDATED 4月3/2018
Chromium团队推荐
https://www.chromium.org/Home/chromium-security/deprecating-powerful-features-on-insecure-origins#TOC-Testing-Powerful-Features
快速超级简易解决方案
有一个秘密旁路短语,可以在错误页面中输入,以便Chrome继续运行,尽管存在安全错误: thisisunsafe (在早期版本的Chrome中,键入 badidea ,甚至更早, danger ) . DO NOT 使用此情况,除非您完全理解为什么需要它!
资源:
https://chromium.googlesource.com/chromium/src/+/d8fc089b62cd4f8d907acff6fb3f5ff58f168697%5E%21/
(注意
window.atob('dGhpc2lzdW5zYWZl')
解析为thisisunsafe
)源的最新版本是@ https://chromium.googlesource.com/chromium/src/+/refs/heads/master/components/security_interstitials/core/browser/resources/interstitial_large.js,
window.atob
函数可以在JS控制台中执行 .有关Chrome团队为何更改旁路短语(第一次)的背景知识:
https://bugs.chromium.org/p/chromium/issues/detail?id=581189
如果一切都失败了
如果没有“Proceed Anyway”选项,并且旁路短语不起作用,那么对于快速的一次性,这个hack很有效:
localhost
的证书错误(注意Chrome更改标志值后需要重新启动):chrome://flags/#allow-insecure-localhost
(和@Chris的投票回答https://stackoverflow.com/a/31900210/430128)
localhost
,那么您就完成了 . 否则,设置TCP隧道以在本地侦听端口8090并连接到端口443上的broken-remote-site.com
,确保已安装socat
并在终端窗口中运行如下操作:socat tcp-listen:8090,reuseaddr,fork tcp:broken-remote-site.com:443
Linux
如果您使用的是Linux,也可以按照以下官方维基页面进行操作:
Configuring SSL certificates on Linux.
NSS Shared DB And LINUX
NSS Shared DB Howto
基本上:
点击带有X的锁图标,
选择证书信息
转到详细信息选项卡
点击导出...(另存为文件)
现在,以下命令将添加证书(其中YOUR_FILE是导出的文件):
要列出所有证书,请运行以下命令:
如果它仍然不起作用,您可能会受到此错误的影响:Issue 55050: Ubuntu SSL error 8179
附:在使用上述命令之前,请确保您有
libnss3-tools
.如果您没有,请通过以下方式安装:
作为奖励,您可以使用以下方便的脚本:
用法:
疑难解答
--auto-ssl-client-auth
参数运行Chromegoogle-chrome --auto-ssl-client-auth
您确定该网站的地址与证书相同吗?我在使用Chrome和自签名证书方面遇到了同样的问题,但最后我发现它对证书上的域名验证非常挑剔(应该是这样) .
Chrome没有自己的证书商店,并使用Window自己的 . 但是,Chrome无法将证书导入商店,因此您应该通过IE添加它们 .
Installing Certificates in Google Chrome
Installing Certificates in Internet Explorer
另外,请看一下创建自签名证书的几种不同方法(我假设您正在使用IIS,因为您没有提到) .
How to Create a Self Signed Certificate in IIS 7
用于在Linux上的Chromium上管理SSL证书的GUI对我来说无法正常工作 . 但是,他们的文档给出了正确的答案 . 诀窍是运行下面的命令导入自签名SSL证书 . 只需更新
<certificate-nickname>
和certificate-filename.cer
的名称,然后重新启动chromium / chrome .From the Docs:
Excerpt From: https://chromium.googlesource.com/chromium/src/+/HEAD/docs/linux_cert_management.md
在要添加的站点上,右键单击地址栏中的红色锁图标:
单击标有 Connection 的选项卡,然后单击 Certificate Information
单击 Details 选项卡,单击按钮 Copy to File... . 这将打开证书导出向导,单击 Next 至进入 Export File Format 屏幕 .
选择 DER encoded binary X.509 (.CER) ,点击 Next
单击 Browse... 并将文件保存到计算机 . 将其命名为描述性的 . 单击 Next ,然后单击 Finish .
打开Chrome设置,滚动到底部,然后点击 Show advanced settings...
在 HTTPS/SSL 下,单击 Manage certificates...
单击 Trusted Root Certification Authorities 选项卡,然后单击 Import... 按钮 . 这将打开“证书导入向导” . 单击 Next 进入 File to Import 屏幕 .
单击 Browse... 并选择之前保存的证书文件,然后单击 Next .
选择 Place all certificates in the following store . 所选商店应为 Trusted Root Certification Authorities . 如果不是,请单击 Browse... 并选择它 . 单击 Next 和 Finish
单击安全警告上的 Yes .
重新启动Chrome .
为了在Windows上进行开发,您可以
添加到Chrome快捷方式标记
--ignore-certificate-errors
它希望忽略证书错误并允许您访问无效的证书网站 .
https://support.opendns.com/entries/66657664中更详细的说明 .
我使用了bjnord建议的过程:Google Chrome, Mac OS X and Self-Signed SSL Certificates
What is shown in the blog did not work.
但是,该博客的评论之一是黄金:
sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain site.crt
您需要关注如何获取证书文件的博客,之后您可以使用上面的命令并且应该很好 .
NOT FOR PROD
只需将其粘贴到您的Chrome中:
您应该看到突出显示的文本说:允许从localhost加载的资源的无效证书
单击
Enable
.有人注意到,您需要重新启动所有Chrome,而不仅仅是浏览器窗口 . 最快的方法是打开一个选项卡...
chrome://restart