SSL 错误:证书链中存在自签名证书

SSL 错误:证书链中存在自签名证书

编辑:正如以下文档所述,http://www.novell.com/support/kb/doc.php?id=7002392我已经像这样连接了这些文件domain.crt sf_bundle.crt >> domain.pem ,现在以下命令openssl s_client -connect domain:465抱怨verify error:num=19:self signed certificate in certificate chain我希望有人可以帮助找出线索:D

我刚刚通过 postfix 配置了我们的 mta,它通过 TLS 提供 IMAP 和 SMTP。在测试期间,我创建了一个自签名证书,但现在,为了避免烦人的不受信任证书警告,我在 GoDaddy 购买了一个便宜的证书;http://www.godaddy.com/compare/gdcompare3_ssl.aspx

这里的问题是我做错了什么,可能是在安装 GoDaddy 下载的证书时,所以我仍然看到警告。

以下是我遇到的过程:

openssl genrsa -des3 -out 域.key 1024
openssl req -new -key 域.key -out 域.csr

转到 GoDaddy,粘贴 csr 文件的内容(包括开始和结束标签)。此时,我可以下载生成的证书(一个 zip 文件),因此现在我有以下文件:

sf_bundle.crt ;链式文件,不知道该怎么用
domain.crt;由 Godaddy 与 sf_bundle 一起提供
domain.csr ;由我生成
domain.key ;由我生成

我不确定我应该怎么做,但我做了以下事情:

cat domain.crt sf_bundle.crt >> /etc/ssl/certs/domain.pem
ln -sf /path/to/domain.key /etc/ssl/private/domain.key  

但在测试时我遇到以下问题:

    openssl s_client -connect imap.domain.ltd:465
已连接(00000003)
深度 = 2 C = 美国,O = “Starfield Technologies, Inc.”,OU = Starfield 2 类认证机构
验证错误:num=19:证书链中的自签名证书
验证返回:0
---
证书链
 0 s:/OU=域控制已验证/CN=webeloping.es
   i:/C=US/ST=Arizona/L=Scottsdale/O=Starfield Technologies, Inc./OU=http://certificates.starfieldtech.com/repository/CN=Starfield Secure Certification Authority/serialNumber=10688435
 1 s:/C=US/ST=Arizona/L=Scottsdale/O=Starfield Technologies, Inc./OU=http://certificates.starfieldtech.com/repository/CN=Starfield Secure Certification Authority/serialNumber=10688435
   i:/C=US/O=Starfield Technologies, Inc./OU=Starfield 2 类认证机构
 2 s:/C=US/O=Starfield Technologies, Inc./OU=Starfield 2 类认证机构
   i:/C=US/O=Starfield Technologies, Inc./OU=Starfield 2 类认证机构
---
服务器证书
-----开始证书-----
MIIFcjCCBFqgAwIBAgIHKx6Jb01O+jANBgkqhkiG9w0BAQFADCB3DELMAkGA1UE
BhMCVVMxEDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAj
BgNVBAoTHFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOTA3BgNVBAsTMGh0
dHA6Ly9jZXJ0aWZpY2F0ZXMuc3RhcmZpZWxkdGVjaC5jb20vcmVwb3NpdG9yeTEx
MC8GA1UEAxMoU3RhcmZpZWxkIFNlY3VyZSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
eTERMA8GA1UEBRMIMTA2ODg0MzUwHhcNMTMwNzEyMDc1NTA0WhcNMTQwNzExMTcz
MTAyWjA7MSEwHwYDVQQLExhEb21haW4gQ29udHJvbCBWYWxpZGF0ZWQxFjAUBgNV
BAMTDXdlYmVsb3BpbmcuZXMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
AQDTAHQM3SanFxSZWnxls837ySCHB/CfBJXIBoKQdYOf/N3lGt69jnNHF8X2ZmSI
TeW5Xk/wXnjruKD/EhBvAxiYZVWcp5zJGxd6VNqntiFCVTSesSnwM/X6A54vq/57
UnvrqK7ZozWnINiO/LIWxdVCUwcOmXH+fp6mVUsCbNd8Gp1HpMorhzpvBj1E/5I4
HbZjErGfrLlCYhs2cATtTcBtiUxne3CKOsT/sWd3Z2DAKsJQqd5u3Y59EEfiJmDq
xtoCkfYAhZz5FkA9mr2PQD+UKGLOGjvRDI7P8p5RR9ZG7jixdok5qq0OikCPwex4
hatfWEokBjmWcmr8QcUk1cQjAgMBAAGjggHXMIIB0zAPBgNVHRMBAf8EBTADAQEA
MB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAOBgNVHQ8BAf8EBAMCBaAw
OQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5zdGFyZmllbGR0ZWNoLmNvbS9z
ZnMxLTI1LmNybDBZBgNVHSAEUjBQME4GC2CGSAGG/W4BBxcBMD8wPQYIKwYBBQUH
AgEWMWh0dHA6Ly9jZXJ0aWZpY2F0ZXMuc3RhcmZpZWxkdGVjaC5jb20vcmVwb3Np
dG9yeS8wgY0GCCsGAQUFBwEBBIGAMH4wKgYIKwYBBQUHMAGGHmh0dHA6Ly9vY3Nw
LnN0YXJmaWVsZHRlY2guY29tLzBQBggrBgEFBQcwAoZEaHR0cDovL2NlcnRpZmlj
YXRlcy5zdGFyZmllbGR0ZWNoLmNvbS9yZXBvc2l0b3J5L3NmX2ludGVybWVkaWF0
ZS5jcnQwHwYDVR0jBBgwFoAUSUtSJ9EbvPKhIWpie1FCeorX1VYwKwYDVR0RBCQw
IoINd2ViZWxvcGluZy5lc4IRd3d3LndlYmVsb3BpbmcuZXMwHQYDVR0OBBYEFJp4
5TYP4T3BfuI67Ek2vxtUNiVCMA0GCSqGSIb3DQEBBQUAA4IBAQBjXFPi/3e3GJ+J
Pj7Rafieee4Tqcc5QbwKvrFEdK3OW9/XjntchNOsKumKFJeiK8bsUbSTS+wlpyKG
+qHwrf8d1TtZgKiyJTBHcKxItqSrGsULM5ntTFq/gchOkE0hwK4vfwHZD9bHyy20
CqexuaTT3zpAL3zZi5q2QaOpqQxhPmlkIZvmNotw+a/E+3hmOFKpQtVfT7XeAcQr
bIUMZUEbs778VzjnKdg4grD7oZxwPczbaeJLhdvKs8OEJSbqX/820hLQfoX+wMCI
PNI1jPU3th1cu9nPKU41BXIDY1L6w9zCl2DRvQvjFx9YnjQ/R6YiyaCCh39WS+xg
+An9srwv
-----证书结束-----

Postfix 中的相关配置如下:

    /etc/postfix/main.cf /etc/postfix/main.cf 复制代码
    ##由 Godaddy 与 sf_bundle.crt 一起提供
    smtpd_tls_cert_file=/etc/ssl/certs/domain.crt
    ##由我生成
    smtpd_tls_key_file=/etc/ssl/private/domain.key
    smtp_tls_CAfile=/etc/ssl/certs/ca-certificates.crt

答案1

您不需要链中的根证书(尽管我认为拥有它不会带来任何损害)。

我认为,在这种情况下,该错误更像是 openssl 发出的警告。我相信这意味着 openssl 不知道它应该信任该链的根证书。如果您从该包中取出根证书,并使用参数将 openssl 命令指向它,-CAfile我预计“错误”应该会消失。

在 sf_bundle.crt 文件中,你应该看到两个

-----BEGIN CERTIFICATE-----
....
-----END CERTIFICATE-----

块(可能每个块上方都有纯文本,显示该块包含哪些证书)。如果您将每个块拆分为自己的文件夹,那么您最终将获得,block1.crt并且block2.crt您应该能够openssl x509 -noout -subject -in <file.crt>在每个块上运行以获取其各自的证书主题行。

假设block2.crt主题行是,/C=US/O=Starfield Technologies, Inc./OU=Starfield Class 2 Certification Authority那么您应该能够运行openssl s_client -CAfile block2.crt -connect imap.domain.ltd:465,并且希望能够连接而不会给您自签名证书错误。

答案2

如果你真的这么做了

domain.key domain.crt sf_bundle.crt >> domain.pem

那么你就将你的私钥包含在链中,而你不应该这样做。

只需要你的服务器证书加上中间证书链,这样客户端就可以将它们顶部的颁发者与他拥有的受信任的根证书进行匹配

相关内容