- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试在低于 android lollipop 的设备上运行时遇到以下错误,但它在高于 lollipop 的版本上运行得非常好。
javax.net.ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0x943e670: Failure in SSL library, usually a protocol error
error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure (external/openssl/ssl/s23_clnt.c:658 0xb750d3a1:0x00000000)
这是我注册用户的方法:
String tag_string_req = "register";
StringRequest strReq = new StringRequest(Request.Method.POST,
AppConfig.URL_REGISTER, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d(TAG, "Register Response: " + response.toString());
hideDialog();
try {
JSONObject jObj = new JSONObject(response);
boolean error = jObj.getBoolean("error");
if (!error) {
String id = jObj.getString("id");
finish();
} else {
String errorMsg = jObj.getString("error_msg");
Toast.makeText(getApplicationContext(),
errorMsg, Toast.LENGTH_LONG).show();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e(TAG, "Registration Error: " + error.getMessage());
Toast.makeText(getApplicationContext(),
error.getMessage(), Toast.LENGTH_LONG).show();
hideDialog();
}
}) {
@Override
protected Map<String, String> getParams() {
Map<String, String> params = new HashMap<String, String>();
params.put("user_name", txtSEditName.getText().toString().trim());
params.put("password", txtSEditPhone.getText().toString().trim());
return params;
}
};
AppController.getInstance().addToRequestQueue(strReq, tag_string_req);
我的 Volley 单例看起来像这样:
public class AppController extends Application {
public static final String TAG = AppController.class.getSimpleName();
private RequestQueue mRequestQueue;
private static AppController mInstance;
@Override
public void onCreate() {
super.onCreate();
mInstance = this;
}
public static synchronized AppController getInstance() {
return mInstance;
}
public RequestQueue getRequestQueue() {
if (mRequestQueue == null) {
mRequestQueue = Volley.newRequestQueue(getApplicationContext());
}
return mRequestQueue;
}
public <T> void addToRequestQueue(Request<T> req, String tag) {
req.setTag(TextUtils.isEmpty(tag) ? TAG : tag);
getRequestQueue().add(req);
}
public <T> void addToRequestQueue(Request<T> req) {
req.setTag(TAG);
getRequestQueue().add(req);
}
public void cancelPendingRequests(Object tag) {
if (mRequestQueue != null) {
mRequestQueue.cancelAll(tag);
}
}
}
我的应用程序配置文件如下所示:
public static String URL_REGISTER = "http://192.168.56.1/MyApp/register.php";
谁能帮我解决这个问题吗?
Error: javax.net.ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: SSL handshake aborted:
最佳答案
我已尝试解决该错误,这对我有用。据我了解,对于 Lollipop 以下的设备,默认情况下不启用 TLSv1.1 和 TLSv1.2 协议(protocol)。为了为使用 jellybean 或 kitkat 的设备启用它们,我们必须使用 SSLSocketFactory。
现在我对 Volley 单例的 getRequestQueue() 方法进行了以下更改:
public RequestQueue getRequestQueue() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN
&& Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT) {
Log.d("msg", "HI, I m a kitkat phone");
try {
ProviderInstaller.installIfNeeded(getApplicationContext());
} catch (GooglePlayServicesRepairableException e) {
// Indicates that Google Play services is out of date, disabled, etc.
// Prompt the user to install/update/enable Google Play services.
GooglePlayServicesUtil.showErrorNotification(e.getConnectionStatusCode(), getApplicationContext());
e.printStackTrace();
} catch (GooglePlayServicesNotAvailableException e) {
// Indicates a non-recoverable error; the ProviderInstaller is not able
// to install an up-to-date Provider.
e.printStackTrace();
}
HttpStack stack = null;
try {
stack = new HurlStack(null, new TLSSocketFactory());
} catch (KeyManagementException e) {
e.printStackTrace();
Log.d("Your Wrapper Class", "Could not create new stack for TLS v1.2");
stack = new HurlStack();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
Log.d("Your Wrapper Class", "Could not create new stack for TLS v1.2");
stack = new HurlStack();
}
mRequestQueue = Volley.newRequestQueue(getApplicationContext(), stack);
} else {
mRequestQueue = Volley.newRequestQueue(getApplicationContext());
}
return mRequestQueue;
}
并创建一个名为 TLSSocketFactory.java 的类并添加以下代码:
公共(public)类 TLSSocketFactory 扩展 SSLSocketFactory {
private SSLSocketFactory internalSSLSocketFactory;
public TLSSocketFactory() throws KeyManagementException, NoSuchAlgorithmException {
SSLContext context = SSLContext.getInstance("TLS");
context.init(null, null, null);
internalSSLSocketFactory = context.getSocketFactory();
}
@Override
public String[] getDefaultCipherSuites() {
return internalSSLSocketFactory.getDefaultCipherSuites();
}
@Override
public String[] getSupportedCipherSuites() {
return internalSSLSocketFactory.getSupportedCipherSuites();
}
@Override
public Socket createSocket() throws IOException {
return enableTLSOnSocket(internalSSLSocketFactory.createSocket());
}
@Override
public Socket createSocket(Socket s, String host, int port, boolean autoClose) throws IOException {
return enableTLSOnSocket(internalSSLSocketFactory.createSocket(s, host, port, autoClose));
}
@Override
public Socket createSocket(String host, int port) throws IOException, UnknownHostException {
return enableTLSOnSocket(internalSSLSocketFactory.createSocket(host, port));
}
@Override
public Socket createSocket(String host, int port, InetAddress localHost, int localPort) throws IOException, UnknownHostException {
return enableTLSOnSocket(internalSSLSocketFactory.createSocket(host, port, localHost, localPort));
}
@Override
public Socket createSocket(InetAddress host, int port) throws IOException {
return enableTLSOnSocket(internalSSLSocketFactory.createSocket(host, port));
}
@Override
public Socket createSocket(InetAddress address, int port, InetAddress localAddress, int localPort) throws IOException {
return enableTLSOnSocket(internalSSLSocketFactory.createSocket(address, port, localAddress, localPort));
}
private Socket enableTLSOnSocket(Socket socket) {
if(socket != null && (socket instanceof SSLSocket)) {
((SSLSocket)socket).setEnabledProtocols(new String[] {"TLSv1.1", "TLSv1.2"});
}
return socket;
}
}
还有一步是在 gradle 文件的依赖项中添加以下实现:
implementation 'com.google.android.gms:play-services-base:11.0.0'
希望这可以帮助您解决这个问题。
关于javax.net.ssl.SSLHandshakeException : javax.net.ssl.SSLProtocolException:SSL 握手中止:,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61402482/
我正在通过一个简单的 HTTP/GET 请求通过 SSL 连接将一组 CSV 行下载到我的 android 设备。在我们切换到新服务器(Debian 6 -> Debian 7)之前,这就像一个魅力,
当我与网络服务器建立 https 连接时出现 SSLProtocolException。我只在 Android 2.3 Gingebread 中有这个异常(exception);相同的代码在所有其他
我想弄清楚为什么有时会出现此错误 javax.net.ssl.SSLProtocolException: SSL handshake terminated: ssl=0x60d46c90: Failu
我在 Android 4.4 手机(特别是 Galaxy S4,尽管我认为这不是手机本身的问题)上遇到了问题。在使用 Retrofit2.Http 时,我在通过 HTTPS 连接时收到以下错误: ja
我正在使用 Java 中的 servlet 创建一个 Web 应用程序,并且我正在使用基于类类型 Jsoup 的 httpclient 等...我遇到了 A CONNECTION SSL 的问题。 M
我遇到来自客户端的服务器问题。在此服务器上,我们的 Web 应用程序安装了 2 个。安装在443端口和8082都是2个HTTPS。 在端口 443 上没有问题。 8082端口初始化小程序时出现java
我有一个通过 SSLSocket 与服务器通信的应用程序。从 Android 6 我收到一个 SSLHandshakeException javax.net.ssl.SSLHandshakeExcep
我使用生成的应用引擎 Android 客户端 (jar lib)。 31 个客户端中有 30 个没有问题。但是一台三星平板电脑拒绝连接并出现崩溃: Android: 4.4.4 Manufacture
我正尝试从 Android 平板电脑向 api 发布一些数据,但我不断收到 SSLProtocolException,我无法找出问题所在。 这是我不断收到的错误: javax.net.ssl.SSLH
我的基于 Spring Boot 的服务在 Apache Http Client 时偶尔会遇到 javax.net.ssl.SSLProtocolException: Connection timed
在我将 IHS 服务器从 7.0.0.33 升级到 7.0.0.37 之后.. 在最新的 IHS 服务器中,SSLv3 被完全禁用.. 我的下面一段代码 HttpURLConnection urlCo
您好,我们的 API 迁移到了 TLS 1.2。我应用此处提出的解决方案 https://github.com/square/okhttp/issues/2372它在测试 API 上运行良好。 htt
我正在尝试创建一个连接到 Netgear WAG102(接入点)的 Java 软件,它必须获取我的 wifi 网络的连接日志。 我的软件已经可以与其他 Netgear 接入点(例如 WG302v2)一
我正在尝试使用 GoogleMap 的 Android API 在我的应用程序中创建地点搜索功能。我想在用户键入地点名称时填充 AutoComplete TextView。但是我在调用 urlCo
我正在尝试通过 XMPP 协议(protocol)建立 TLS 安全(使用客户端身份验证)连接。我使用的是标准端口而不是专用 SSL 端口,后者显然已被弃用。 startTLS 进程永远不会完成握手。
我制作了一个爬虫应用程序,由于错误“握手警报:unrecognized_name”,某些网站无法连接。 我找到的大多数解决方案都是通过禁用 SNI 扩展 (jsse.enableSNIExtensio
我尝试在低于 android lollipop 的设备上运行时遇到以下错误,但它在高于 lollipop 的版本上运行得非常好。 javax.net.ssl.SSLHandshakeException
我一直在寻找这个问题的解决方案,但我似乎无法弄清楚 我正在尝试在 Android 应用程序和服务器之间通过 http 连接使用 ssl,我用我的自签名证书创建了一个 keystore 我有这段代码:
我想接受所有站点的所有证书,但我从一个站点获得了 unrecognized_name。我怎样才能接受或通过它,以便我可以得到这个网站的内容? 提前致谢 最佳答案 I want to accept al
我正在尝试从 AWS 实现 DynamoDBMapper,但当我尝试连接到 AWS 服务器时应用程序崩溃了。 首先,我在 Android Studio 模拟器上运行 Android 4.4.2,一切似
我是一名优秀的程序员,十分优秀!