我想使用自签名证书建立安全连接。我为 openssl 使用了以下conf文件
[req]
distinguished_name = req_distinguished_name
x509_extensions = v3_req
prompt = no
[req_distinguished_name]
countryName = EN
stateOrProvinceName = NY
localityName = New York
organizationName = MyOrg
organizationalUnitName = MyDept
[v3_req]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer
basicConstraints = CA:TRUE
subjectAltName = @alt_names
[alt_names]
IP.1 = 10.0.4.70
并生成运行证书
openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout key.pem -out cert.pem -config openssl.cnf
但是,当我的服务器获取这些证书时,我得到了
[WARNING] 2018/04/14 14:19:09 push_to_system.go:419: sending sample request failed:Post https://10.0.4.70:8090/content/: x509: certificate signed by unknown authority
如何修复我的证书生成以避免此问题?
答案1
山姆的答案可能会让你工作,但对于生产来说不是一个好主意。为了清楚起见,我将尝试解释为什么你会得到这个。
创建一组用于签署证书的加密密钥是不够的。任何人都可以做到这一点,而你刚刚做到了。这就是为什么存在“受信任的证书颁发机构”,这些是已知且受信任的实体。 ssl 实现附带了一系列权限及其公钥,以验证声称由他们签名的证书实际上来自他们,而不是其他自称是他们的人。
因此,当您创建自己的证书时,任何 ssl 实现都会看到证书确实是由您签名的,但他们不知道您可以被信任,因此除非您将 CA(证书颁发机构)添加到受信任的列表中,否则它将拒绝该证书。 SSL 不仅用于加密消息,还用于验证与您交谈的人或对某些内容进行加密签名的人是否是他们所说的人。
批量“跳过”、“绕过”或生产中的验证不是一个好主意,因为它会接受任何人的证书,使您容易受到冒充或中间人攻击。
您的问题不在于您的证书创建,而在于您的 ssl 客户端配置。它非常清楚地告诉您它拒绝连接,因为它不知道正在与谁通话。 (这很好)
您必须将您的证书颁发机构设置为客户端上受信任的证书颁发机构。这取决于您的设置,因此需要更多详细信息来帮助您。这是试图解决该问题的另一个问题:
请注意,这仅适用于您,如果您有第三方客户进行交谈,他们都会出于同样的原因拒绝您的认证,并且必须做出相同的调整。这就是为什么受信任的 CA 出售应用程序/服务器等的签名证书服务,因为它们已经在列表中,并且值得信赖来验证您的身份。因此,如果您付费让他们这样做,则生成的证书将受到每个人的信任。 :)
答案2
您可以尝试使用 的解决方法-tls-skip-verify
,这应该可以绕过该错误。然而,这只是暂时的。修复:您应该尝试通过重新启动 openSSL 实例来解决该问题 - 设置新证书和/或重新启动服务器。