如果您对AndroidEmulator“链接验证失败”将开发人员计算机与自签名证书连接起来感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于AndroidEmulator“链接
如果您对Android Emulator“链接验证失败”将开发人员计算机与自签名证书连接起来感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于Android Emulator“链接验证失败”将开发人员计算机与自签名证书连接起来的详细内容,并且为您提供关于Android App 自带自签名证书 CA、Android App 自带自签名证书CA、Android Emulator 25.1.3 发布、Android Emulator Qemu vnc的有价值信息。
本文目录一览:- Android Emulator“链接验证失败”将开发人员计算机与自签名证书连接起来
- Android App 自带自签名证书 CA
- Android App 自带自签名证书CA
- Android Emulator 25.1.3 发布
- Android Emulator Qemu vnc
Android Emulator“链接验证失败”将开发人员计算机与自签名证书连接起来
No reply because of error:
javax.net.ssl.SSLHandshakeException: Chain validation Failed
at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:361)
我有从服务开发者机器导出的自签名证书,没有私钥DER编码.我掉到了模拟器上并“安装”但这不起作用.
我使用了相同的证书并复制到模拟的SD卡.然后从模拟器中的安全设置安装.结果相同.链验证失败.
现在我的安全/证书知识非常基础.我认为这个错误实际上描述了这个问题.自签名证书中没有链条……但我可能是错的.
无论如何,我该如何解决这个问题?
我希望能够运行我的android代码并点击开发人员框进行测试/调试等.
我已经阅读了这样的帖子,只是为了拥有企业环境,我正在阻止开放SSL等网站.
https://android.stackexchange.com/questions/61540/self-signed-certificate-install-claims-success-but-android-acts-as-if-cert-isn
我通过WebView访问该服务.
任何帮助,指针,想法将不胜感激.
TIA
解决方法
Android App 自带自签名证书 CA
Android App 自带自签名证书 CA
我们都知道自签名 https 证书默认是不被系统信任的。
所以访问使用自签名证书的网站,默认一般都是终止访问,提示错误。
面对自签名证书导致的错误提示,我们可以:
1、无视继续;
2、用户手动导入自签名证书 CA(Certificate Authority)进系统并信任证书;
3、应用自带自签名证书;
本文主要说一下 Android App 自带自签名证书 CA 一些做法。
常规 App
这里常规 App 是指使用 Android SDK 开发,或者基于 Android SDK API 的框架开发的 App。
网络安全配置文件
在 Manifest.xml 的 application 添加 android:networkSecurityConfig,如:
<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
<application android:networkSecurityConfig="@xml/network_security_config"
...
>
...
</application>
</manifest>
添加文件 res/xml/network_security_config.xml:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config>
<trust-anchors>
<certificates src="@raw/extra_cas"/>
<certificates src="system"/>
</trust-anchors>
</base-config>
</network-security-config>
自签证书的 CA,就写进文件 res/raw/extra_cas (可以放多个):
-----BEGIN CERTIFICATE-----
Content Of CA1 .....
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
Content Of CA2 .....
-----END CERTIFICATE-----
.....
适用范围
目前网络安全配置文件,仅适用Android 7.0+。
测试有效的API:WebView,URLConnection,okhttp
无效的API:Flutter HttpClient
Flutter
网络安全配置文件对 Flutter 开发的 App 是无效的。需要另想办法。
纯 fluttr 项目
在项目源码目录下,创建 assets 目录,然后 CA 保存到文件 asset/extra_cas。
然后添加代码如下:
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
static Object ca = "";
@override
Widget build(BuildContext context) {
if (ca == "")ca = setupRootCA();
......
}
static Object setupRootCA (){
var ft = rootBundle.load(''assets/extra_cas'');
ft.then((ByteData value) {
SecurityContext.defaultContext.setTrustedCertificatesBytes(value.buffer.asUint8List());
return null;
});
return Object();
}
......
}
原先使用 HttpClient 的代码,无需任何修改就可以支持使用自签名证书的 https 链接了。
混合项目
原生代码和 flutter 混合的项目,如果不介意在 apk 放两个相同 CAs 文件,
其实很简单的(flutter 和原生用不同文件)。
那么如果我们想项目就放一份 CAs 文件呢?假设就用 res/raw/extra_cas 这个文件,还是有办法的。
具体做方法:
原生侧
网络安全配置还是照样搞
在 Flutter 入口 Activity,添加代码:
public class MainActivity extends FlutterActivity {
......
//读取CAs文件的内容
protected byte[] getTrustedCA(){
InputStream in = getResources().openRawResource(R.raw.extra_cas);
ByteArrayOutputStream bao = new ByteArrayOutputStream();
byte[] buf = new byte[4096];
int n = 0;
while (true){
try {
if ((n = in.read(buf))<=0) break;
bao.write(buf,0,n);
} catch (IOException e) {
e.printStackTrace();
}
}
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
return bao.toByteArray();
}
//对接Flutter的调用
@Override
public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) {
GeneratedPluginRegistrant.registerWith(flutterEngine);
new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), "flutter.app.share")
.setMethodCallHandler(
(call, result) -> {
if (call.method.contentEquals("getTrustedCA")) {
result.success(getTrustedCA());
}
}
);
}
......
}
Flutter 侧
修改之前的方法 setupRootCA:
static Object setupRootCA ()
{
Future ft = const MethodChannel(''flutter.app.share'').invokeMethod(''getTrustedCA'');
ft.then((value) {
Uint8List ca = value;
SecurityContext.defaultContext.setTrustedCertificatesBytes(ca);
return null;
});
return Object();
}
恶心的 flutter
https 的证书一般都给出自己有效的域名和 IP。创建证书时一般域名和 IP 存不同字段名称的。
但是 flutter 似乎不验证 IP 字段的,所以使用 IP 访问会出现 hostname 不匹配的问题。
这事搞得我曾经怀疑人生,IP 明明已经列进证书,Androd 原生代码、PC 浏览器、curl 都没问题。
flutter 就是不行,最后通过把 IP 列进域名字段就正常了。不按套路出牌,也不说明,真是累死人。
参考链接
Create your own Certificate Authority (CA) using OpenSSL
使用 Openssl 生成自签证书
Network security configuration
HttpClient
SecurityContext
Android App 自带自签名证书CA
Android App 自带自签名证书CA
我们都知道自签名https证书默认是不被系统信任的。
所以访问使用自签名证书的网站,默认一般都是终止访问,提示错误。
面对自签名证书导致的错误提示,我们可以:
1、无视继续;
2、用户手动导入自签名证书CA(Certificate Authority)进系统并信任证书;
3、应用自带自签名证书;
本文主要说一下Android App自带自签名证书CA一些做法。
常规App
这里常规App是指使用Android SDK开发,或者基于Android SDK API的框架开发的App。
网络安全配置文件
在Manifest.xml的application添加android:networkSecurityConfig,如:
<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
<application android:networkSecurityConfig="@xml/network_security_config"
...
>
...
</application>
</manifest>
添加文件res/xml/network_security_config.xml:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config>
<trust-anchors>
<certificates src="@raw/extra_cas"/>
<certificates src="system"/>
</trust-anchors>
</base-config>
</network-security-config>
自签证书的CA,就写进文件res/raw/extra_cas(可以放多个):
-----BEGIN CERTIFICATE-----
Content Of CA1 .....
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
Content Of CA2 .....
-----END CERTIFICATE-----
.....
适用范围
目前网络安全配置文件,仅适用Android 7.0+。
测试有效的API:WebView,URLConnection,okhttp
无效的API:Flutter HttpClient
Flutter
网络安全配置文件对Flutter开发的App是无效的。需要另想办法。
纯fluttr项目
在项目源码目录下,创建assets目录,然后CA保存到文件asset/extra_cas。
然后添加代码如下:
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
static Object ca = "";
@override
Widget build(BuildContext context) {
if (ca == "")ca = setupRootCA();
......
}
static Object setupRootCA (){
var ft = rootBundle.load(''assets/extra_cas'');
ft.then((ByteData value) {
SecurityContext.defaultContext.setTrustedCertificatesBytes(value.buffer.asUint8List());
return null;
});
return Object();
}
......
}
原先使用HttpClient的代码,无需任何修改就可以支持使用自签名证书的https链接了。
混合项目
原生代码和flutter混合的项目,如果不介意在apk放两个相同CAs文件,
其实很简单的(flutter和原生用不同文件)。
那么如果我们想项目就放一份CAs文件呢?假设就用res/raw/extra_cas这个文件,还是有办法的。
具体做方法:
原生侧
网络安全配置还是照样搞
在Flutter入口Activity,添加代码:
public class MainActivity extends FlutterActivity {
......
//读取CAs文件的内容
protected byte[] getTrustedCA(){
InputStream in = getResources().openRawResource(R.raw.extra_cas);
ByteArrayOutputStream bao = new ByteArrayOutputStream();
byte[] buf = new byte[4096];
int n = 0;
while (true){
try {
if ((n = in.read(buf))<=0) break;
bao.write(buf,0,n);
} catch (IOException e) {
e.printStackTrace();
}
}
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
return bao.toByteArray();
}
//对接Flutter的调用
@Override
public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) {
GeneratedPluginRegistrant.registerWith(flutterEngine);
new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), "flutter.app.share")
.setMethodCallHandler(
(call, result) -> {
if (call.method.contentEquals("getTrustedCA")) {
result.success(getTrustedCA());
}
}
);
}
......
}
Flutter侧
修改之前的方法setupRootCA:
static Object setupRootCA ()
{
Future ft = const MethodChannel(''flutter.app.share'').invokeMethod(''getTrustedCA'');
ft.then((value) {
Uint8List ca = value;
SecurityContext.defaultContext.setTrustedCertificatesBytes(ca);
return null;
});
return Object();
}
恶心的flutter
https的证书一般都给出自己有效的域名和IP。创建证书时一般域名和IP存不同字段名称的。
但是flutter似乎不验证IP字段的,所以使用IP访问会出现hostname不匹配的问题。
这事搞得我曾经怀疑人生,IP明明已经列进证书,Androd原生代码、PC浏览器、curl都没问题。
flutter就是不行,最后通过把IP列进域名字段就正常了。不按套路出牌,也不说明,真是累死人。
参考链接
Create your own Certificate Authority (CA) using OpenSSL
使用Openssl生成自签证书
Network security configuration
HttpClient
SecurityContext
Android Emulator 25.1.3 发布
Emulator 25.1.3 发布了,以下是值得关注的内容:
Snapshot fixes (b.android.com/206205, b.android.com/207279)
Fix the crash on exit in IniFileAutoFlusher (b.android.com/203248)
Fix potential segfault in RenderControl (b.android.com/205803)
Fix software rendering issue introduced in 25.1.2 (b.android.com/205937)
下载地址:https://sites.google.com/a/android.com/tools/download/studio
Android Emulator Qemu vnc
emulator -avd name -qemu -vnc :4
我有错误:
Could not read keymap file: ''en-us''
是模拟器的错误还是qemu的错误?我该怎么办呢?
我已经阅读了this topic并从/urs/local/Cellar/qemu/1.7.0_1/share/qemu/keymaps创建了符号链接到我的android-sdk / tools文件夹,但它没有帮助. (我使用OS X 10.9)
希望得到你的帮助.
谢谢
解决方法
创建此文件夹:(android-sdk)/ tools / keymaps
在(android-sdk)/ tools / keymaps中创建一个名为en-us的空文件.
模拟器应该立即开始.
我们今天的关于Android Emulator“链接验证失败”将开发人员计算机与自签名证书连接起来的分享就到这里,谢谢您的阅读,如果想了解更多关于Android App 自带自签名证书 CA、Android App 自带自签名证书CA、Android Emulator 25.1.3 发布、Android Emulator Qemu vnc的相关信息,可以在本站进行搜索。
本文标签: