运行以下命令时 openssl s_client -host example.xyz -port 9093
我收到以下错误:
139810559764296:error:14094412:SSL routines:SSL3_READ_BYTES:sslv3 alert bad certificate:s3_pkt.c:1259:SSL alert number 42
39810559764296:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:s23_lib.c:184:
Run Code Online (Sandbox Code Playgroud)
但最后我收到"Verify return code: 0 (ok)"
消息。
我的问题是上述警报表示什么,以及 SSL 是否真的成功。
SSL handshake has read 6648 bytes and written 354 bytes
New, TLSv1/SSLv3, Cipher is AES128-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : TLSv1.2
Cipher : AES128-SHA
Session-ID: xx
Session-ID-ctx:
Master-Key: xx
Key-Arg : None
Krb5 Principal: None
PSK identity: None …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用由中间 CA 签名的 SSL 证书(用于服务器和客户端)配置双向 SSL。这是我在本教程之后所做的。
服务器 - nginx 应用程序
Nginx 配置了 SSL 证书(由中间 CA 签名)。
server {
listen 443;
server_name app-ca.test.com;
ssl on;
ssl_certificate /root/ca/intermediate/certs/app-plus-intermediate.pem;
ssl_certificate_key /root/ca/intermediate/private/app-ca-interm-ca.test.com.key.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
# I have also tried adding the Intermediate CA cert in vain
# ssl_client_certificate /root/client_rootca_intermediate.crt;
ssl_client_certificate /root/client_rootca.crt;
ssl_verify_client on;
location / {
root /usr/share/nginx/massl;
index index.html index.htm;
}
}
Run Code Online (Sandbox Code Playgroud)
客户端 - curl 或 OpenSSL s_client
我有一个由其他一些中间 CA 签名的客户端证书,但失败了 400 The SSL certificate …
我的公司向默认使用 http 的客户提供了一个基于 Tomcat/MySQL 的应用程序。应客户的要求,我通过创建自签名证书使其能够使用 https。使用自签名证书时,这会受到预期的浏览器错误的影响。
经过渗透测试,他们决定我们需要禁用一些已弃用的 ssl 协议和密码,因此我将 tomcat server.xml 中的 ssl 连接器修改为如下所示:
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" sslEnabledProtocols="TLSv1.2,TLSv1.1" ciphers="TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_RC4_128_SHA,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,TLS_WITH_AES_128_GCM_SHA256"
keystoreFile="/path/to/keystore/file"
keystorePass="password" />
Run Code Online (Sandbox Code Playgroud)
这满足了渗透测试,该应用程序继续在所有三个主要浏览器(Chrome、Firefox 和 IE)中运行。但是,渗透测试也表明我们最好不要使用自签名证书,因此,按照这些 指南,我创建了一个 CSR 并让客户创建了一个签名到其内部域的证书(服务器可以通过以下方式访问)几个不同的 URL,因此需要使用 SAN 创建 CSR)。
我将证书添加到新的密钥库并相应地修改了 server.xml 文件中的路径。现在,当我尝试连接时,出现以下错误(这是来自 Firefox,但所有浏览器都会产生类似的错误):
安全连接失败
连接到 172.31.1.36:8443 期间发生错误。无法与对等方安全通信:没有通用的加密算法。错误代码:SSL_ERROR_NO_CYPHER_OVERLAP
由于无法验证接收到的数据的真实性,因此无法显示您尝试查看的页面。请联系网站所有者以告知他们此问题。
我的理解是证书不控制应该使用什么密码或协议,所以我不明白为什么会发生这种情况。这是我在生成 CSR 时犯的错误还是客户端在生成证书时犯的错误?
-编辑-
我似乎到处都在出错。如果我尝试将密钥导入密钥库,我会得到以下任一信息:
cat <keyfile> | openssl pkcs12 -export -out <keystore>.p12
Enter pass phrase:
unable to load certificates
Run Code Online (Sandbox Code Playgroud)
或这个:
keytool -importkeystore -srckeystore <keyfile> -srcstoretype pkcs12 -destkeystore <keystore>.jks
Enter destination …
Run Code Online (Sandbox Code Playgroud) 我们有一个面向公众的开发服务器,需要 SSL 来实现特定功能。
然而,以任何形式使用 SSL 的一切都会返回
curl: (60) Peer's certificate issuer has been marked as not trusted by the user.
Run Code Online (Sandbox Code Playgroud)
这不是“好吧,在 yum 上使用 ssl-verify=false,或者在curl 请求上使用 --insecure”的问题。
我意识到我可以在这两个电话上这样做。但最终 - 我必须能够使用 SSL,因为我们使用这些服务器进行的开发需要它。
CA 似乎已经过时了。我已尝试以下 https://access.redhat.com/solutions/1549003
我尝试过自己导入 cacert.pem 文件(不过我承认,我在这里缺乏知识,所以可能我做错了)
我已经检查了服务器上的日期/时间,以确保这不是问题。
我无法让“网络管理员”(宽松使用的术语,因为他将是第一个承认他对 Linux 完全一无所知的人 - 纯微软)甚至不关心在这台机器上重新安装 Centos,所以我需要找到一个解决这个问题。
任何帮助,将不胜感激。以下是我们在尝试执行 yum、curl 和运行 certbot --apache 等操作时得到的一些示例
百胜餐饮集团
[root@localhost work]# yum reinstall mc
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Could not get metalink https://mirrors.fedoraproject.org/metalink?repo=epel-
7&arch=x86_64 error was
14: curl#60 - "Peer's certificate issuer has been …
Run Code Online (Sandbox Code Playgroud) 我注意到我们使用 cURL 的链接检查器越来越频繁地无法验证 SSL 证书。我正在努力追查到底。
例如,https: //www.bgetem.de/ 在我的 Windows 7 机器上的每个浏览器(IE 11、Firefox、Opera、Chrome)上都可以正常打开,但在我的 CentOS 6 和 Ubuntu 16.04 上的 cURL(和 wget)不能验证证书。
这是来自 CentOS (Version curl 7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2
) cURL 的详细输出
* About to connect() to www.bgetem.de port 443 (#0)
* Trying 193.104.3.166... connected
* Connected to www.bgetem.de (193.104.3.166) port 443 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
* CAfile: /etc/pki/tls/certs/ca-bundle.crt
CApath: none
* Peer's certificate issuer is not recognized: 'CN=COMODO RSA Domain Validation Secure Server …
Run Code Online (Sandbox Code Playgroud) 我正在尝试保护一个子域:
bitbucket.kl.company.com
Run Code Online (Sandbox Code Playgroud)
该证书适用于 *.company.com。所以我得到一个错误:
bitbucket.kl.company.com uses an invalid security certificate. The certificate is only valid for the following names: *.company.com, company.com, bitbucket-mirror.company.com Error code: SSL_ERROR_BAD_CERT_DOMAIN
Run Code Online (Sandbox Code Playgroud)
令人费解的是,有些浏览器并没有抱怨,而是按预期加载页面。我的证书有问题吗?我可以专门为 bitbucket.kl.company.com 订购证书,而不使用 *.company.com 吗?
地狱大家,
所以我试图为我的域创建一个自签名证书,由于某种原因,openssl 不断为我的服务器创建 V1 证书而不是 V3,这导致浏览器在我在那里时不会给我“绿色锁”。
知道为什么会发生这种情况。
这是我的 server.crt 文件:
Certificate:
Data:
Version: 1 (0x0)
Serial Number:
30:61:e6:70:fd:e4:c9:f6:23:ed:e1:1c:cd:8c:c9:9e:68:7b:01:cf
Signature Algorithm: sha256WithRSAEncryption
Issuer: C = CA, ST = ON, L = Toronto, O = Boss Insights, OU = DevOps, CN = Boss Insights, emailAddress = ghaith@sublimeapp.com
Validity
Not Before: Aug 13 14:33:12 2019 GMT
Not After : Aug 10 14:33:12 2029 GMT
Subject: C = CA, ST = ON, L = Toronto, O = Boss Insights, OU = DevOps, CN = …
Run Code Online (Sandbox Code Playgroud) openssl ssl-certificate certificate-authority self-signed-certificate ssl-certificate-errors
我正在将配置从单个主机切换到 nginx 服务器上的多个虚拟主机。在我更改之前,ssl 可以正常工作,但是在添加了几个虚拟主机后,每个虚拟主机都有唯一的域名 - 因此 - 不同的证书,ssl 不想工作。
我原来的配置是:
# fragment of nginx.conf file
http {
# ...
ssl_certificate_key /path/to/privkey.pem;
ssl_certificate /path/to/fullchain.pem;
ssl_dhparam /path/to/dhparam;
# ...
}
Run Code Online (Sandbox Code Playgroud)
因此,这是 nginx 服务器的单个证书。
添加几个虚拟主机后,我希望他们为他们的域提供他们自己的、正确的证书。所以我从主nginx.conf
文件中删除了所有与 ssl 相关的参数,并将它们添加到虚拟主机文件中,如下所示:
# fragment of sites-enabled/my.server.com file
server {
listen 443 ssl;
root "/var/www/my.server.com/";
server_name my.server.com www.my.server.com;
location / {
try_files $uri $uri/ /index.html;
}
ssl_certificate_key /path/to/my/server/com/privkey.pem;
ssl_certificate /path/to/my/server/com/fullchain.pem;
ssl_dhparam /path/to/my/server/com/dhparam;
}
Run Code Online (Sandbox Code Playgroud)
重新加载 nginx 后,我无法连接到这些虚拟主机:
# curl https://my.server.com
curl: (35) gnutls_handshake() failed: The TLS connection was …
Run Code Online (Sandbox Code Playgroud) ERR_SSL_PROTOCOL_ERROR
由于某种原因,我的网站从 2 天起就出现错误。
已测试浏览器
ERR_SSL_PROTOCOL_ERROR
ERR_SSL_PROTOCOL_ERROR
网络服务器配置
是的,我的网络服务器已经过时,计划在几个月内迁移。
无法运行的网站是https://specto.ca
Apache HTTPd 配置原文
测试前的配置
[...]
<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
SSLStrictSNIVHostCheck off
</IfModule>
[...]
<VirtualHost 69.70.187.100:443>
[...]
ServerAlias specto.ca
ServerAlias www.specto.ca
[...]
SSLEngine on
SSLCertificateFile /home/.../ssl.crt
SSLCertificateKeyFile /home/.../ssl.key
SSLCACertificateFile /home/.../chain.crt
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
Apache HTTPd 配置正在运行
我测试后的配置
[...]
<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
SSLStrictSNIVHostCheck on
SSLProtocol …
Run Code Online (Sandbox Code Playgroud) 我正在使用有效的证书,但无法获得客户端证书。lighttpd 服务失败并出现错误:
(connections-glue.c.200) SSL: 1 错误:140890C7:SSL 例程:SSL3_GET_CLIENT_CERTIFICATE:peer 没有返回证书
我的配置是这样的:
$SERVER["socket"] == ":443" {
protocol = "https://"
ssl.engine = "enable"
ssl.disable-client-renegotiation = "enable"
#server.name = "mywebsite.com"
ssl.pemfile = "/etc/lighttpd/ssl/mywebsite.com.pem"
ssl.ca-file = "/etc/lighttpd/ssl/mywebsite.com.csr"
ssl.ec-curve = "secp384r1"
ssl.use-sslv2 = "disable"
ssl.use-sslv3 = "disable"
ssl.honor-cipher-order = "enable"
ssl.cipher-list = "ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS"
# HSTS(15768000 seconds = 6 months)
#setenv.add-response-header = (
# "Strict-Transport-Security" => "max-age=15768000;"
#)
#ask for client cert
ssl.verifyclient.exportcert = "enable"
ssl.verifyclient.activate = "enable"
ssl.verifyclient.username = "SSL_CLIENT_S_DN_CN"
ssl.verifyclient.enforce = "enable"
ssl.verifyclient.depth = 3
} …
Run Code Online (Sandbox Code Playgroud) 我必须使用使用自签名证书(来自 Ubuntu)的服务。我已将公司的 CA 添加到受信任列表 (Ubuntu)。之后“链中自签名证书”错误消失了,但现在我收到“CA证书太弱”错误。例如
curl -vvv https://someservicehost.net
* Trying 93.184.216.34:443...
* TCP_NODELAY set
* Connected to someservicehost.net (93.184.216.34) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
* CAfile: /etc/ssl/certs/ca-certificates.crt
CApath: /etc/ssl/certs
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (OUT), TLS alert, bad certificate (554):
* SSL certificate problem: CA certificate key too …
Run Code Online (Sandbox Code Playgroud) 我的一个站点上的 TLS (SSL) 证书昨天已过期。我获得了一个新的 - 并将其安装在网站上(在 nginx 下的 Debian 9 上运行)。现在,当我从 windows 或 mac 访问该站点时,证书得到正确处理并且一切正常。
同时,我有一项服务在同一台服务器上运行并连接到同一站点。自证书更新以来,此服务开始失败。尝试对此进行调试时,我意识到安装证书的系统本身不信任颁发者。使用 wget,我收到此错误:
证书没有已知的颁发者
使用 curl 我收到此错误:
SSL 证书问题:无法获取本地颁发者证书
这似乎指向系统上缺少 ca 证书。我试过跑步update-ca-certificates
和dpkg-reconfigure ca-certificates
. 两个过程都成功完成,但问题仍然存在。
以下是 Mac 上 Chrome 的证书详细信息:
我试图手动将根颁发者证书添加到 ca-certs 存储中update-ca-certificate
,但是这导致了重复证书的警告。
我怎样才能解决这个问题?禁用证书检查不是一个选项;通过 HTTP 访问该站点也不是一种选择。
ssl debian ssl-certificate ssl-certificate-errors debian-stretch