[英]HTTPS url with port number not working on iOS
我在包含端口号的 HTTPS url 上发送一个简单的 GET 请求。 网址看起来像这样
https://example.com:8080/v1/base
这在 Android 和任何浏览器上都可以完美运行……甚至 curl。 但是,我在 iOS 上收到此错误。 如果我从上面的 URL 中删除端口号,这工作得很好!
错误:错误域=NSURLErrorDomain 代码=-1202 “此服务器的证书无效。您可能正在连接到一个伪装成“example.com”的服务器,这可能会使您的机密信息处于危险之中。 UserInfo=0xa694c50 {NSErrorFailingURLStringKey= https://example.com:8080/v1/base , NSLocalizedRecoverySuggestion=您是否仍要连接到服务器?, NSErrorFailingURLKey= https://example.com:8080/api/v1/base , NSLocalizedDescription=此服务器的证书无效。 您可能正在连接到一个伪装成“example.com”的服务器,这可能会使您的机密信息处于危险之中。, NSUnderlyingError=0xa2410a0 “该服务器的证书无效。您可能正在连接到一个伪装成是“example.com”,这可能会使您的机密信息处于危险之中。”,NSURLErrorFailingURLPeerTrustErrorKey=}
SSL 证书由 DigiCert 颁发。 服务器后端是 node v0.10.15 和 iOS SDK v6.1
知道我在这里缺少什么吗?
添加requestCert: true
& CA 证书解决了这个问题
var https = require('https'), // module for https
fs = require('fs'); // required to read certs and keys
var options = {
key: fs.readFileSync('ssl/server.key'),
cert: fs.readFileSync('ssl/server.crt'),
ca: fs.readFileSync('ssl/ca.crt'),
requestCert: true,
rejectUnauthorized: false
};
https.createServer(options, function (req, res) {
if (req.client.authorized) {
res.writeHead(200, {"Content-Type": "application/json"});
res.end('{"status":"approved"}');
} else {
res.writeHead(401, {"Content-Type": "application/json"});
res.end('{"status":"denied"}');
}
}).listen(443);
您是否包括除您自己之外的任何其他父 CA 证书?
另外,如果您使用 8080 或 443 以外的端口,它是否有效? 如果您监听 443 并明确尝试请求https://example.com:443/v1/base
是否有效?
var fs = require('fs');
var httpsOpt = {
key : fs.readFileSync('ssl.plain.key').toString(),
cert : fs.readFileSync('ssl.crt').toString(),
ca:[fs.readFileSync('ca.pem').toString(),
fs.readFileSync('sub.class1.server.ca.pem').toString()],
};
https.createServer(httpsOpt, app)
.listen('8080', function(){
console.log('Listening on 8080')
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.