話不多說,直入正題。
先說node.js端
證書是我在騰訊云搞得,下載下來即可。上代碼
node用的是express模塊
var app = require('express')();
var fs = require('fs');
var http = require('http');
var https = require('https');
var privateKey = fs.readFileSync('3_sallen.cc.key');
var certificate = fs.readFileSync('2_sallen.cc.crt');
var credentials = {key: privateKey, cert: certificate};
var httpServer = http.createServer(app);
var httpsServer = https.createServer(credentials, app);
var PORT = 8000;
var SSLPORT = 8001;
httpServer.listen(PORT, function() {
console.log('HTTP Server is running on: http://localhost:%s', PORT);
});
httpsServer.listen(SSLPORT, function() {
console.log('HTTPS Server is running on: https://localhost:%s', SSLPORT);
});
app.get('/user', function(req, res) {
if(req.protocol === 'https') {
res.status(200).send('Welcome to sallen');
}
else {
res.status(200).send('Welcome!');
}
});
好了 下面是ios
后臺給的證書crt的話 需要轉(zhuǎn)換成cer
進到證書路徑,執(zhí)行下面語句 openssl x509 -in 你的證書.crt -out 你的證書.cer -outform der 這樣你就可以得到cer類型的證書了
sallen是我轉(zhuǎn)換的證書。
我用的是免費證書 所以在ios訪問時以下錯誤,

error.png
所以需要在afnetworking里面注釋掉下面

zhushi.png
當然了 花錢的證書 應(yīng)該是不需要的。
下面ios代碼附上
NSString *url = @"your address";
NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"sallen" ofType:@"cer"];
NSData *certData =[NSData dataWithContentsOfFile:cerPath];
NSSet *certSet = [[NSSet alloc] initWithObjects:certData, nil];
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy defaultPolicy];
// 設(shè)置證書
[securityPolicy setPinnedCertificates:certSet];
securityPolicy.allowInvalidCertificates = YES;
securityPolicy.validatesDomainName = YES;
// 初始化請求的manager對象
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.securityPolicy = securityPolicy;
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
[manager GET:url parameters:nil progress:^(NSProgress * progress){
} success:^(NSURLSessionDataTask *task, id responseObject) {
NSArray * array = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableLeaves error:nil];
NSLog(@"OK === %@",array);
} failure:^(NSURLSessionDataTask *task, NSError *error) {
NSLog(@"error ==%@",error.description);
}];
```