1

ポート番号を含む HTTPS URL で単純な GET 要求を送信しています。URLはこんな感じ

https://example.com:8080/v1/base

これは、Android と任意のブラウザーで完全に機能します。しかし、iOSでこのエラーが発生します。上記の URL からポート番号を削除すると、問題なく動作します。

Error:Error Domain=NSURLErrorDomain Code=-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 です。

ここで何が欠けているのか分かりますか?

4

2 に答える 2

1

requestCert: trueCA証明書を追加するとこれが解決しました

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);
于 2013-08-08T22:35:09.260 に答える