我的域是: starline.ru 4
我运行了此命令:android 7.0无法连接
它产生了此输出:
Caused by: javax.net.ssl.SSLProtocolException: SSL handshake terminated: ssl=0x76a8eb8a00: Failure in SSL library, usually a protocol error error:10000410:SSL routines:OPENSSL_internal:SSLV3_ALERT_HANDSHAKE_FAILURE (external/boringssl/src/ssl/s3_pkt.c:641 0x76a8e2b0a0:0x00000001) error:1000009a:SSL routines:OPENSSL_internal:HANDSHAKE_FAILURE_ON_CLIENT_HELLO (external/boringssl/src/ssl/s3_clnt.c:800 0x76d2e2c253:0x00000000)
at com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(Native Method)
at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:364)
SSLV3-包装线,实际上sslv3不使用
我的Web服务器是(包含版本):
nginx version: nginx/1.14.1
built with OpenSSL 1.1.0f 25 May 2017 (running with OpenSSL 1.1.0l 10 Sep 2019)
TLS SNI support enabled
我的Web服务器运行的操作系统是( include版本): Debian GNU/Linux 9.13 (stretch)
以前,生成了RSA私钥。一切正常。
现在,已经生成了一个私钥,作为EC和okhttp3的应用程序( https://square.github.io/okhttp 4或直接在Android 7.0上使用ssl )-无法使用android webclient后端连接(应用程序)。
您几乎可以肯定会遇到这个问题:
解决此问题的唯一方法是不使用EC证书。现在,您可以通过切换到P-256来解决问题,但是由于将来的E1中间体是P-384,因此这不是长期的解决方案。
该服务器使用的是P-384椭圆曲线证书,而Android 7.0不支持该证书。
至少根据 @Nummer378 在 另一个线程 2:
Android 7.0有一个错误,其中唯一受支持的椭圆曲线是P-256 29, 这意味着Let’s Encrypts E1 / X2证书使用的P-384曲线无法由此Android版本处理。Android版本建议ECC支持,因此我认为这种情况只会破坏(握手,而我的测试)中的“非法参数” TLS警报通常会失败。7.1是固定的,这似乎仅影响7.0。年龄大于7.0 (例如6.x及以下)以及7.1,并且较新的工作正常。
因此,至少需要使用P-256椭圆曲线(,只要它仍由RSA中间体签名即可, 因为应该改变,最终将由P-384中间体签名,无论如何它都会在Android 7.0上崩溃),因此,如果您需要支持较旧的android版本,请坚持使用RSA。
(再一次, @Nummer378比I快。)
解决此问题的唯一方法是不使用EC证书。
如何生成RSA而不是EC?
那么,您如何获得服务器的证书? 还是您只是在控制客户端而不是服务器?
我控制服务器。计划更新后,客户端会出现问题,从而可以对服务器上的证书进行加密。
nginx上的当前设置:
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
# ssl_ecdh_curve prime256v1:secp384r1;
# ssl_ecdh_curve prime256v1;
# ssl_ecdh_curve X25519:P-256:P-384:P-224:P-521;
ssl_ecdh_curve P-256;
因此,您需要配置用于生成RSA密钥而不是EC密钥的任何ACME客户端。我仍然不清楚您正在使用什么ACME客户端。他们中的大多数人默认会使用RSA,并且在没有人明确告知他们的情况下不会切换到EC。
谢谢! 我使用脱水脚本-它有
--algo (-a) rsa|prime256v1|secp384r1 Which public key algorithm should be used? Supported: rsa, prime256v1 and secp384r1
现在,我将尝试生成新的证书。
我使用prime256v1生成了新的证书-现在Android 7.0可以工作了。
谢谢大家!
很高兴听到这对您有用。但是请注意,其他一些旧系统也可能不支持prime256v1,并且您可能需要切换到RSA。从现在开始,在某个时候(可能相当长的一段时间内,旧的Android可能没有那么多的市场份额),prime256v1 ( P-256 )键将由P-384中间体签名, Android 7.0也不喜欢。如果您担心的话,RSA是最向后兼容的。
由于ApplePay也有问题,我再次通过RSA重新生成了证书。