我有一个iOS应用程序,可通过https与API进行通信。通过在手机上安装Charles代理的根证书并将我的计算机设置为代理,我已经成功地在Charles代理中以明文形式截获了这些消息。
我现在正在全神贯注于所有工作原理,因此我试图在NodeJS中重现Charles代理的功能。
我已采取的步骤:
现在,如果我将计算机设置为IOS中的代理,请进入iOS应用程序,那么我是否应该将请求发送到NodeJS服务器?真的什么也没发生。 NodeJS服务器未收到任何请求,iOS应用程序无法显示信息(因为它当然无法到达API)。
在我的脑海中,应该发生以下流动:
我的问题是:我想念什么?为什么它不起作用?
我在下面包含了一些代码。请注意,我还没有开始代理“真实” API,我只是想在NodeJS中接收消息。
以下是与上述步骤相关的代码:
生成根CA和服务器证书
# CA
openssl genrsa -out ca.key 4096
openssl req -x509 -new -nodes -key ca.key -sha256 -days 1024 -out ca.crt
生成与API服务器证书匹配的服务器证书,并从步骤1开始用CA签名
# Server
openssl genrsa -out server.key 2048
openssl req -new -sha256 -key server.key -subj "/C=US/ST=CA/O=MyOrg Inc./CN=external.api.com" -out server.csr
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 500 -sha256
NodeJS服务器
const fs = require('fs');
const https = require('https');
const options = {
key: fs.readFileSync('./server.key'),
cert: fs.readFileSync('./server.crt'),
};
https.createServer(options, (req, res) => {
console.log(`Got request headers: ${JSON.stringify(req.headers, true, 2)}`);
console.log(`Got request body: ${JSON.stringify(req.body, true, 2)}`);
console.log(`Got request url: ${req.url}`);
res.writeHead(200, { 'Content-type': 'text/plain' });
res.write('yup');
res.end();
}).listen(3102);