mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-09 16:32:39 +01:00
Support "ssl.chain" in Aphlict configuration
Summary: Fixes T10806. Although browsers don't seem to care about this, it's more correct to support it, and the new test console uses normal `cURL` and does care. Test Plan: - Hit the error case for providing a chain but no key/cert. - Used `openssl s_client -connect localhost:22280` to connect to local Aphlict servers. - With SSL but no chain, saw `openssl` fail to verify the remote. - With SSL and a chain, saw `openssl` verify the identify of the remote. Reviewers: chad Reviewed By: chad Maniphest Tasks: T10806 Differential Revision: https://secure.phabricator.com/D15709
This commit is contained in:
parent
383ae7621f
commit
07fc8f17cc
4 changed files with 33 additions and 5 deletions
|
@ -5,14 +5,16 @@
|
||||||
"port": 22280,
|
"port": 22280,
|
||||||
"listen": "0.0.0.0",
|
"listen": "0.0.0.0",
|
||||||
"ssl.key": null,
|
"ssl.key": null,
|
||||||
"ssl.cert": null
|
"ssl.cert": null,
|
||||||
|
"ssl.chain": null
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "admin",
|
"type": "admin",
|
||||||
"port": 22281,
|
"port": 22281,
|
||||||
"listen": "127.0.0.1",
|
"listen": "127.0.0.1",
|
||||||
"ssl.key": null,
|
"ssl.key": null,
|
||||||
"ssl.cert": null
|
"ssl.cert": null,
|
||||||
|
"ssl.chain": null
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"logs": [
|
"logs": [
|
||||||
|
|
|
@ -99,6 +99,7 @@ abstract class PhabricatorAphlictManagementWorkflow
|
||||||
'listen' => 'optional string|null',
|
'listen' => 'optional string|null',
|
||||||
'ssl.key' => 'optional string|null',
|
'ssl.key' => 'optional string|null',
|
||||||
'ssl.cert' => 'optional string|null',
|
'ssl.cert' => 'optional string|null',
|
||||||
|
'ssl.chain' => 'optional string|null',
|
||||||
));
|
));
|
||||||
|
|
||||||
$port = $server['port'];
|
$port = $server['port'];
|
||||||
|
@ -145,6 +146,21 @@ abstract class PhabricatorAphlictManagementWorkflow
|
||||||
'ssl.key',
|
'ssl.key',
|
||||||
'ssl.cert'));
|
'ssl.cert'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$ssl_chain = idx($server, 'ssl.chain');
|
||||||
|
if ($ssl_chain && (!$ssl_key && !$ssl_cert)) {
|
||||||
|
throw new PhutilArgumentUsageException(
|
||||||
|
pht(
|
||||||
|
'A specified server (at index "%s", on port "%s") specifies '.
|
||||||
|
'a value for "%s", but no value for "%s" or "%s". Servers '.
|
||||||
|
'should only provide an SSL chain if they also provide an SSL '.
|
||||||
|
'key and SSL certificate.',
|
||||||
|
$index,
|
||||||
|
$port,
|
||||||
|
'ssl.chain',
|
||||||
|
'ssl.key',
|
||||||
|
'ssl.cert'));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$servers) {
|
if (!$servers) {
|
||||||
|
|
|
@ -85,13 +85,15 @@ Each server in the `servers` list should be an object with these keys:
|
||||||
`admin` or `client`. Normally, you should run one of each.
|
`admin` or `client`. Normally, you should run one of each.
|
||||||
- `port`: //Required int.// The port this server should listen on.
|
- `port`: //Required int.// The port this server should listen on.
|
||||||
- `listen`: //Optional string.// Which interface to bind to. By default,
|
- `listen`: //Optional string.// Which interface to bind to. By default,
|
||||||
the `admin` server is bound to localhost (so only other services on the
|
the `admin` server is bound to `127.0.0.1` (so only other services on the
|
||||||
local machine can connect to it), while the `client` server is bound
|
local machine can connect to it), while the `client` server is bound
|
||||||
to `0.0.0.0` (so any client can connect.
|
to `0.0.0.0` (so any client can connect).
|
||||||
- `ssl.key`: //Optional string.// If you want to use SSL on this port,
|
- `ssl.key`: //Optional string.// If you want to use SSL on this port,
|
||||||
the path to an SSL key.
|
the path to an SSL key.
|
||||||
- `ssl.cert`: //Optional string.// If you want to use SSL on this port,
|
- `ssl.cert`: //Optional string.// If you want to use SSL on this port,
|
||||||
the path to an SSL certificate.
|
the path to an SSL certificate.
|
||||||
|
- `ssl.chain`: //Optional string.// If you have configured SSL on this
|
||||||
|
port, an optional path to a certificate chain file.
|
||||||
|
|
||||||
Each log in the `logs` list should be an object with these keys:
|
Each log in the `logs` list should be an object with these keys:
|
||||||
|
|
||||||
|
|
|
@ -104,6 +104,10 @@ for (ii = 0; ii < config.servers.length; ii++) {
|
||||||
spec['ssl.cert'] = fs.readFileSync(spec['ssl.cert']);
|
spec['ssl.cert'] = fs.readFileSync(spec['ssl.cert']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (spec['ssl.chain']){
|
||||||
|
spec['ssl.chain'] = fs.readFileSync(spec['ssl.chain']);
|
||||||
|
}
|
||||||
|
|
||||||
servers.push(spec);
|
servers.push(spec);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -132,9 +136,13 @@ for (ii = 0; ii < servers.length; ii++) {
|
||||||
if (server['ssl.key']) {
|
if (server['ssl.key']) {
|
||||||
var https_config = {
|
var https_config = {
|
||||||
key: server['ssl.key'],
|
key: server['ssl.key'],
|
||||||
cert: server['ssl.cert']
|
cert: server['ssl.cert'],
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if (server['ssl.chain']) {
|
||||||
|
https_config.ca = server['ssl.chain'];
|
||||||
|
}
|
||||||
|
|
||||||
http_server = https.createServer(https_config);
|
http_server = https.createServer(https_config);
|
||||||
} else {
|
} else {
|
||||||
http_server = http.createServer();
|
http_server = http.createServer();
|
||||||
|
|
Loading…
Reference in a new issue