出于测试目的,我正在尝试将套接字工厂添加到我的okHttp客户端,该客户端在设置代理时信任所有内容.这已经完成了很多次,但是我对一个信任套接字工厂的实现似乎缺少了一些东西:
class TrustEveryoneManager implements X509TrustManager {
@Override
public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException { }
@Override
public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException { }
@Override
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
}
OkHttpClient client = new OkHttpClient();
final InetAddress ipAddress = InetAddress.getByName("XX.XXX.XXX.XXX"); // some IP
client.setProxy(new Proxy(Proxy.Type.HTTP, new InetSocketAddress(ipAddress, 8888)));
SSLContext sslContext = SSLContext.getInstance("TLS");
TrustManager[] trustManagers = new TrustManager[]{new TrustEveryoneManager()};
sslContext.init(null, trustManagers, null);
client.setSslSocketFactory(sslContext.getSocketFactory);
Run Code Online (Sandbox Code Playgroud)
没有请求从我的应用程序发出,并且没有异常被记录,因此它似乎在okHttp中无声地失败.经过进一步调查,似乎Connection.upgradeToTls()在强制握手时,okHttp中有一个异常被吞没.我得到的例外是:javax.net.ssl.SSLException: SSL handshake terminated: ssl=0x74b522b0: SSL_ERROR_ZERO_RETURN occurred. You …
我正在构建一个小型的ReactNative iOS应用程序.在其中,我使用fetch API向我控制的服务器发出一个简单的get请求,该服务器具有有效但自签名的SSL证书.可以理解,这会导致错误.
在iOS/JSC之间,我不确定如何(或者什么!)我可以为我的应用程序配置忽略此错误 - 到目前为止我发现的所有答案都与Objective-C解决方案有关,我正在寻找一些东西我可以与JSC环境一起使用.
我正在尝试使用axios向api端点发出请求,我收到以下错误: Error: unable to verify the first certificate
看来,axios使用的https模块无法验证服务器上使用的SSL证书.
使用浏览器访问服务器时,证书有效,我可以查看/下载它.我也可以通过https在我的浏览器上向api发出请求.
我可以通过关闭验证来解决它.这段代码有效.
const result = await axios.post(
`https://${url}/login`,
body,
{
httpsAgent: new https.Agent({
rejectUnauthorized: false
})
}
)
Run Code Online (Sandbox Code Playgroud)
问题是,这不会验证SSL证书,因此会打开安全漏洞.
如何配置axios以信任证书并正确验证它?
我正在用 expo 构建一个应用程序。
使用axios来处理请求。
该 API 具有自签名证书。
请求在 android 7 上失败(它们在 android 9 上工作)
我在网上读到我需要添加一个network_security_config.xml到 android 清单。关联。
我怎样才能在expo(可能是app.json)中做到这一点而不弹出?
谢谢 !
当我在我的本机应用程序中使用fetch函数时,事情在iOS上按预期工作,但在android中出错.错误是'TypeError:网络请求失败'.做了一些调试,我发现错误的原因似乎如下:'java.security.cert.CertPathValidatorException:找不到证书路径的信任锚'.
为什么这个在iOS上运行而不在android上,我该如何最好地修复它?是故障是本机还是更深层?
我有一个在本地运行的VM,它是使用Vagrant构建的.我可以直接从浏览器卷曲并转到URL.出于某种原因,当我使用fetchAPI 在我的react-native应用程序中进行相同的调用时,它会一直给我Network request failed错误.
以下是代码片段:
fetchData() {
this.setState({ isLoading: true });
var baseURL = 'https://192.168.33.33/api/session';
console.log('URL: >>> ' + baseURL);
fetch(baseURL)
.then((response) => response.json())
.then((responseData) => {
console.log(responseData);
})
.catch(error => {
console.log(error);
})
.done();
}
Run Code Online (Sandbox Code Playgroud)
该baseURL日志返回正确的URL,错误如下所示:
URL: >>> http://192.168.33.33/api/session
TypeError: Network request failed {stack: (...), message: "Network request failed"}
message: "Network request failed"
stack: (...)
get stack: function () { [native code] }
set stack: function () { [native code] }
__proto__: Error …Run Code Online (Sandbox Code Playgroud) 背景
整个互联网上人们都在问为什么他们不能在 React Native 中发出 http 请求。答案通常是因为他们必须更新info.plist. 对我来说,这曾经是一个问题。我更新了我的设置,并http在fetch请求中工作。
从那以后我更新了我的服务器并SSL在我的节点 api 端点上有了。当我在生产服务器上的邮递员中到达端点时,没有任何问题。但是,当我删除添加到info.plist允许请求的设置,然后尝试运行我的应用程序时,在运行访问 fetch 调用中http使用的端点的代码时,我再次收到错误。https
代码示例
我更新了我的代码以发出如下请求:
fetch('https://api.email.com/v1/clients/update', {
...
}
Run Code Online (Sandbox Code Playgroud)
当像这样使用 http 发出请求时:
fetch('http://api.email.com/v1/clients/update', {
...
}
Run Code Online (Sandbox Code Playgroud)
我在info.plist
<key>api.wuno.com</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
<key>wuno.com</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
Run Code Online (Sandbox Code Playgroud)
但现在我再次收到错误:
网络请求失败
问题
现在我已经有了SSL终点API。当被邮递员击中时它正在工作。我从 中删除了例外情况info.plist。我需要采取哪些步骤才能使用https我fetch的react native应用程序?
当我正在使用无效证书的https服务器执行XMLHttpRequest时,React Native会抛出异常"操作无法完成.(NSURLErrorDomain error -1202.)"
是否可以禁用对React Native XMLHttpRequest的ssl警告/检查?
react-native ×6
ssl ×4
android ×3
javascript ×3
fetch ×2
ios ×2
axios ×1
expo ×1
info.plist ×1
node.js ×1
okhttp ×1
reactjs ×1