我在包含端口号的HTTPS网址上发送简单的GET请求。网址看起来像这样
https://example.com:8080/v1/base
这适用于Android和任何浏览器。甚至卷曲。但是,我在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发布。服务器后端是节点v0.10.15和iOS SDK v6.1
知道我在这里缺少什么吗?
答案 0 :(得分: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);
答案 1 :(得分:0)
您是否包含超出自己的任何其他父级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')
});