@andrewheberle/serverless-ssh-ca 0.24.0 → 0.24.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -0
- package/dist/api/operations.d.ts.map +1 -1
- package/dist/api/operations.js +4 -4
- package/dist/api/operations.js.map +1 -1
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +22 -1
- package/dist/logger.js.map +1 -1
- package/dist/ssh/keys.d.ts +6 -5
- package/dist/ssh/keys.d.ts.map +1 -1
- package/dist/ssh/keys.js +98 -11
- package/dist/ssh/keys.js.map +1 -1
- package/package.json +1 -1
- package/src/api/operations.ts +4 -4
- package/src/logger.ts +25 -1
- package/src/ssh/keys.ts +112 -12
package/README.md
CHANGED
|
@@ -322,6 +322,10 @@ default:
|
|
|
322
322
|
ssh-keygen -t ed25519 -N "" -C "" -f ssh-ca
|
|
323
323
|
```
|
|
324
324
|
|
|
325
|
+
Unencrypted keys in PKCS#8 format (starting with `-----BEGIN PRIVATE KEY-----`),
|
|
326
|
+
such as those created by `ssh-keygen -m PKCS8` or `openssl genpkey`, are also
|
|
327
|
+
accepted.
|
|
328
|
+
|
|
325
329
|
RSA CA keys are not supported. With an RSA CA key
|
|
326
330
|
configured, every request that uses the CA key (including `/api/v3/ca` and
|
|
327
331
|
the KRL endpoints) returns a `500` error, and the reason is logged:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../../src/api/operations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAStD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAG9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,EAAiB,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE9D,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../../src/api/operations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAStD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAG9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,EAAiB,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE9D,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAqChD;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,MAAa,UAAU,KAAK,MAAM,KAAG,OAAO,CAAC,QAAQ,CAQ5E,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc,MAAa,UAAU,KAAK,MAAM,mBAAmB,eAAe,KAAG,OAAO,CAAC,QAAQ,CA+DjH,CAAA;AAiDD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,gBAAgB,MAAa,UAAU,KAAK,MAAM,QAAQ,MAAM,OAAO,CAAC,cAAc,CAAC,mBAAmB,eAAe,WAAW,cAAc,KAAG,OAAO,CAAC,QAAQ,CAyDjL,CAAA;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,MAAM,MAAa,UAAU,KAAK,MAAM,UAAU,MAAM,aAAa,SAAS,mBAAmB,eAAe,KAAG,OAAO,CAAC,QAAQ,CAwC/I,CAAA"}
|
package/dist/api/operations.js
CHANGED
|
@@ -16,7 +16,8 @@ const caKeyError = (l, err) => {
|
|
|
16
16
|
l.error(err.message);
|
|
17
17
|
return new InternalServerErrorException(err.message);
|
|
18
18
|
case (err instanceof KeyParseError):
|
|
19
|
-
|
|
19
|
+
// the reason is only logged, as it may describe the key
|
|
20
|
+
l.error(`error parsing private key: ${err.message}`, "error", err);
|
|
20
21
|
return new InternalServerErrorException("error parsing private key");
|
|
21
22
|
case (err instanceof ApiException):
|
|
22
23
|
// re-throw any exisiting chanfana error
|
|
@@ -191,9 +192,8 @@ export const issueCertificate = async (c, l, sign, certificateType, renews) => {
|
|
|
191
192
|
}
|
|
192
193
|
catch (err) {
|
|
193
194
|
switch (true) {
|
|
194
|
-
case (err instanceof UnsupportedKeyError):
|
|
195
|
-
l
|
|
196
|
-
throw new InternalServerErrorException(err.message);
|
|
195
|
+
case (err instanceof UnsupportedKeyError || err instanceof KeyParseError):
|
|
196
|
+
throw caKeyError(l, err);
|
|
197
197
|
case (err instanceof ApiException):
|
|
198
198
|
// re-throw any exisiting chanfana error
|
|
199
199
|
throw err;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operations.js","sourceRoot":"","sources":["../../src/api/operations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAU,MAAM,wBAAwB,CAAA;AACtD,OAAO,EACN,YAAY,EACZ,iBAAiB,EACjB,wBAAwB,EACxB,4BAA4B,EAC5B,iBAAiB,EACjB,4BAA4B,GAC5B,MAAM,UAAU,CAAA;AAGjB,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAEpE,OAAO,EAAE,aAAa,EAAkB,MAAM,gBAAgB,CAAA;AAC9D,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAE3E,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AACtC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,EACN,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,GACjB,MAAM,gBAAgB,CAAA;AAEvB;;GAEG;AACH,MAAM,UAAU,GAAG,CAAC,CAAS,EAAE,GAAY,EAAgB,EAAE;IAC5D,QAAQ,IAAI,EAAE,CAAC;QACd,KAAK,CAAC,GAAG,YAAY,mBAAmB,CAAC;YACxC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YACpB,OAAO,IAAI,4BAA4B,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QACrD,KAAK,CAAC,GAAG,YAAY,aAAa,CAAC;YAClC,CAAC,CAAC,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"operations.js","sourceRoot":"","sources":["../../src/api/operations.ts"],"names":[],"mappings":"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"}
|
package/dist/logger.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC/C,OAAO,EAAE,MAAM,EAAY,MAAM,wBAAwB,CAAA;
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC/C,OAAO,EAAE,MAAM,EAAY,MAAM,wBAAwB,CAAA;AAuBzD,eAAO,MAAM,MAAM,QAAS,aAAa,KAAG,MAe3C,CAAA"}
|
package/dist/logger.js
CHANGED
|
@@ -1,4 +1,22 @@
|
|
|
1
1
|
import { Logger, LogLevel } from "@andrewheberle/ts-slog";
|
|
2
|
+
// how many causes of an error are logged, in case a chain of causes loops
|
|
3
|
+
const MaxCauseDepth = 5;
|
|
4
|
+
/**
|
|
5
|
+
* Returns a value to log, with an error converted to a plain object. Errors
|
|
6
|
+
* have no enumerable properties, so are otherwise logged as little more than
|
|
7
|
+
* their name.
|
|
8
|
+
*/
|
|
9
|
+
const logValue = (value, depth = 0) => {
|
|
10
|
+
if (!(value instanceof Error)) {
|
|
11
|
+
return value;
|
|
12
|
+
}
|
|
13
|
+
return {
|
|
14
|
+
name: value.name,
|
|
15
|
+
message: value.message,
|
|
16
|
+
...(value.cause === undefined || depth >= MaxCauseDepth ? {} : { cause: logValue(value.cause, depth + 1) }),
|
|
17
|
+
stack: value.stack,
|
|
18
|
+
};
|
|
19
|
+
};
|
|
2
20
|
export const logger = (env) => {
|
|
3
21
|
const level = env.LOG_LEVEL === "none"
|
|
4
22
|
? LogLevel.None
|
|
@@ -9,6 +27,9 @@ export const logger = (env) => {
|
|
|
9
27
|
: env.LOG_LEVEL == "debug"
|
|
10
28
|
? LogLevel.Debug
|
|
11
29
|
: LogLevel.Info;
|
|
12
|
-
return new Logger({
|
|
30
|
+
return new Logger({
|
|
31
|
+
minLevel: level,
|
|
32
|
+
logHandler: (output) => console.log(Object.fromEntries(Object.entries(output).map(([key, value]) => [key, logValue(value)]))),
|
|
33
|
+
});
|
|
13
34
|
};
|
|
14
35
|
//# sourceMappingURL=logger.js.map
|
package/dist/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAEzD,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,GAAkB,EAAU,EAAE;IACpD,MAAM,KAAK,GAAG,GAAG,CAAC,SAAS,KAAK,MAAM;QACrC,CAAC,CAAC,QAAQ,CAAC,IAAI;QACf,CAAC,CAAC,GAAG,CAAC,SAAS,KAAK,OAAO;YAC1B,CAAC,CAAC,QAAQ,CAAC,KAAK;YAChB,CAAC,CAAC,GAAG,CAAC,SAAS,KAAK,SAAS;gBAC5B,CAAC,CAAE,QAAQ,CAAC,OAAO;gBACnB,CAAC,CAAC,GAAG,CAAC,SAAS,IAAI,OAAO;oBACzB,CAAC,CAAC,QAAQ,CAAC,KAAK;oBAChB,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAA;IAEnB,OAAO,IAAI,MAAM,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAEzD,0EAA0E;AAC1E,MAAM,aAAa,GAAG,CAAC,CAAA;AAEvB;;;;GAIG;AACH,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAE,KAAK,GAAG,CAAC,EAAW,EAAE;IACvD,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAA;IACb,CAAC;IAED,OAAO;QACN,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,GAAG,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC;QAC3G,KAAK,EAAE,KAAK,CAAC,KAAK;KAClB,CAAA;AACF,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,GAAkB,EAAU,EAAE;IACpD,MAAM,KAAK,GAAG,GAAG,CAAC,SAAS,KAAK,MAAM;QACrC,CAAC,CAAC,QAAQ,CAAC,IAAI;QACf,CAAC,CAAC,GAAG,CAAC,SAAS,KAAK,OAAO;YAC1B,CAAC,CAAC,QAAQ,CAAC,KAAK;YAChB,CAAC,CAAC,GAAG,CAAC,SAAS,KAAK,SAAS;gBAC5B,CAAC,CAAE,QAAQ,CAAC,OAAO;gBACnB,CAAC,CAAC,GAAG,CAAC,SAAS,IAAI,OAAO;oBACzB,CAAC,CAAC,QAAQ,CAAC,KAAK;oBAChB,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAA;IAEnB,OAAO,IAAI,MAAM,CAAC;QACjB,QAAQ,EAAE,KAAK;QACf,UAAU,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;KAC7H,CAAC,CAAA;AACH,CAAC,CAAA"}
|
package/dist/ssh/keys.d.ts
CHANGED
|
@@ -80,13 +80,14 @@ export type PrivateKey = {
|
|
|
80
80
|
readonly jwk: JsonWebKey;
|
|
81
81
|
};
|
|
82
82
|
/**
|
|
83
|
-
* Parses an unencrypted Ed25519 or ECDSA private key in OpenSSH
|
|
84
|
-
* created by `ssh-keygen
|
|
83
|
+
* Parses an unencrypted Ed25519 or ECDSA private key, either in OpenSSH
|
|
84
|
+
* format, as created by `ssh-keygen`, or in PKCS#8 format, as created by
|
|
85
|
+
* `ssh-keygen -m PKCS8` or `openssl genpkey`
|
|
85
86
|
*
|
|
86
|
-
* @param text The private key, starting with `-----BEGIN OPENSSH PRIVATE KEY-----`
|
|
87
|
-
* @returns The private key
|
|
87
|
+
* @param text The private key, starting with `-----BEGIN OPENSSH PRIVATE KEY-----` or `-----BEGIN PRIVATE KEY-----`
|
|
88
|
+
* @returns The private key. A PKCS#8 key has no comment.
|
|
88
89
|
* @throws {@link KeyParseError} when the key cannot be parsed or is encrypted
|
|
89
90
|
* @throws {@link UnsupportedKeyError} when the key is not an Ed25519 or ECDSA key
|
|
90
91
|
*/
|
|
91
|
-
export declare const parsePrivateKey: (text: string) => PrivateKey
|
|
92
|
+
export declare const parsePrivateKey: (text: string) => Promise<PrivateKey>;
|
|
92
93
|
//# sourceMappingURL=keys.d.ts.map
|
package/dist/ssh/keys.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../src/ssh/keys.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,qBAAa,aAAc,SAAQ,KAAK;IACvC,YAAY,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,EAM3C;CACD;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;IAC7C,YAAY,OAAO,EAAE,MAAM,EAK1B;CACD;AAMD;;GAEG;AACH,qBAAa,SAAS;IACrB,8CAA8C;IAC9C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,0DAA0D;IAC1D,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;IACzB,qCAAqC;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;IAEpC;;;;OAIG;IACH,YAAY,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,MAAM,EAQ7C;IAED;;;;;OAKG;IACH,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAmBpC;IAED;;;OAGG;IACH,WAAW,IAAI,MAAM,CAEpB;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAEhC;IAED;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAElD;IAED;;OAEG;IACH,QAAQ,IAAI,MAAM,CAIjB;CACD;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,OAAO,CAAA;AAErC;;;;;GAKG;AACH,eAAO,MAAM,UAAU,QAAS,SAAS,KAAG,MAAM,GAAG,SAmBpD,CAAA;AAED,gDAAgD;AAChD,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,CAAA;AAQ7D;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG;IACxB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;IACxB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAA;IAC7B,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAA;CACxB,GAAG;IACH,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;IACtB,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAA;IAC1B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAA;IAC7B,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAA;CACxB,CAAA;
|
|
1
|
+
{"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../src/ssh/keys.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,qBAAa,aAAc,SAAQ,KAAK;IACvC,YAAY,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,EAM3C;CACD;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;IAC7C,YAAY,OAAO,EAAE,MAAM,EAK1B;CACD;AAMD;;GAEG;AACH,qBAAa,SAAS;IACrB,8CAA8C;IAC9C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,0DAA0D;IAC1D,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;IACzB,qCAAqC;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;IAEpC;;;;OAIG;IACH,YAAY,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,MAAM,EAQ7C;IAED;;;;;OAKG;IACH,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAmBpC;IAED;;;OAGG;IACH,WAAW,IAAI,MAAM,CAEpB;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAEhC;IAED;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAElD;IAED;;OAEG;IACH,QAAQ,IAAI,MAAM,CAIjB;CACD;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,OAAO,CAAA;AAErC;;;;;GAKG;AACH,eAAO,MAAM,UAAU,QAAS,SAAS,KAAG,MAAM,GAAG,SAmBpD,CAAA;AAED,gDAAgD;AAChD,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,CAAA;AAQ7D;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG;IACxB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;IACxB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAA;IAC7B,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAA;CACxB,GAAG;IACH,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;IACtB,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAA;IAC1B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAA;IAC7B,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAA;CACxB,CAAA;AAiOD;;;;;;;;;GASG;AACH,eAAO,MAAM,eAAe,SAAgB,MAAM,KAAG,OAAO,CAAC,UAAU,CAgBtE,CAAA"}
|
package/dist/ssh/keys.js
CHANGED
|
@@ -178,23 +178,86 @@ const EcdsaPrivateKey = P.struct({
|
|
|
178
178
|
const keyTypeName = (type) => {
|
|
179
179
|
return type.replace(/^ssh-/, "").replace(/^ecdsa-sha2-.*$/, "ecdsa");
|
|
180
180
|
};
|
|
181
|
+
// decodes the base64 body of a PEM block
|
|
182
|
+
const decodePem = (body) => {
|
|
183
|
+
try {
|
|
184
|
+
return new Uint8Array(base64.decode(body.replace(/\s+/g, "")));
|
|
185
|
+
}
|
|
186
|
+
catch (err) {
|
|
187
|
+
throw new KeyParseError("private key could not be decoded", err);
|
|
188
|
+
}
|
|
189
|
+
};
|
|
190
|
+
/** The algorithms that an unencrypted PKCS#8 private key is imported as, in the order they are tried */
|
|
191
|
+
const Pkcs8Algorithms = [
|
|
192
|
+
{ type: "ed25519", algorithm: { name: "Ed25519" } },
|
|
193
|
+
...["nistp256", "nistp384", "nistp521"].map((curve) => ({ type: "ecdsa", curve, algorithm: { name: "ECDSA", namedCurve: EcdsaCurves[curve].namedCurve } })),
|
|
194
|
+
];
|
|
195
|
+
// imports a PKCS#8 private key, returning undefined if it is not a key for
|
|
196
|
+
// the algorithm
|
|
197
|
+
const importPkcs8 = async (der, algorithm) => {
|
|
198
|
+
try {
|
|
199
|
+
return await crypto.subtle.importKey("pkcs8", der, algorithm, true, ["sign"]);
|
|
200
|
+
}
|
|
201
|
+
catch {
|
|
202
|
+
return undefined;
|
|
203
|
+
}
|
|
204
|
+
};
|
|
205
|
+
// returns a member of a JWK exported by WebCrypto, which is always present
|
|
206
|
+
// for the key types that are exported
|
|
207
|
+
const jwkMember = (jwk, name) => {
|
|
208
|
+
const value = jwk[name];
|
|
209
|
+
if (value === undefined) {
|
|
210
|
+
throw new KeyParseError(`private key was missing "${name}" when exported`);
|
|
211
|
+
}
|
|
212
|
+
return value;
|
|
213
|
+
};
|
|
214
|
+
/**
|
|
215
|
+
* Parses an unencrypted Ed25519 or ECDSA private key in PKCS#8 format, as
|
|
216
|
+
* created by `ssh-keygen -m PKCS8` or `openssl genpkey`
|
|
217
|
+
*/
|
|
218
|
+
const parsePkcs8PrivateKey = async (body) => {
|
|
219
|
+
const der = decodePem(body);
|
|
220
|
+
for (const candidate of Pkcs8Algorithms) {
|
|
221
|
+
const cryptoKey = await importPkcs8(der, candidate.algorithm);
|
|
222
|
+
if (cryptoKey === undefined) {
|
|
223
|
+
continue;
|
|
224
|
+
}
|
|
225
|
+
const jwk = await crypto.subtle.exportKey("jwk", cryptoKey);
|
|
226
|
+
const d = jwkMember(jwk, "d");
|
|
227
|
+
const x = jwkMember(jwk, "x");
|
|
228
|
+
if (candidate.type === "ed25519") {
|
|
229
|
+
return {
|
|
230
|
+
type: "ed25519",
|
|
231
|
+
publicKey: new PublicKey(P.struct({ type: SSHText, key: SSHBytes }).encode({ type: "ssh-ed25519", key: base64urlnopad.decode(x) })),
|
|
232
|
+
jwk: { kty: "OKP", crv: "Ed25519", d, x },
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
const y = jwkMember(jwk, "y");
|
|
236
|
+
const point = new Uint8Array([0x04, ...base64urlnopad.decode(x), ...base64urlnopad.decode(y)]);
|
|
237
|
+
return {
|
|
238
|
+
type: "ecdsa",
|
|
239
|
+
curve: candidate.curve,
|
|
240
|
+
publicKey: new PublicKey(P.struct({ type: SSHText, curve: SSHText, key: SSHBytes }).encode({ type: `ecdsa-sha2-${candidate.curve}`, curve: candidate.curve, key: point })),
|
|
241
|
+
jwk: { kty: "EC", crv: EcdsaCurves[candidate.curve].namedCurve, d, x, y },
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
// RSA keys are recognised only to give a clearer error
|
|
245
|
+
if (await importPkcs8(der, { name: "RSASSA-PKCS1-v1_5", hash: "SHA-256" }) !== undefined) {
|
|
246
|
+
throw new UnsupportedKeyError("CA key type rsa is not supported, the CA key must be Ed25519 or ECDSA");
|
|
247
|
+
}
|
|
248
|
+
// WebCrypto does not say why a key could not be imported, so a key of
|
|
249
|
+
// another type cannot be told apart from one that is corrupt
|
|
250
|
+
throw new KeyParseError("PKCS#8 private key could not be imported as an Ed25519 or ECDSA (nistp256, nistp384 or nistp521) key");
|
|
251
|
+
};
|
|
181
252
|
/**
|
|
182
253
|
* Parses an unencrypted Ed25519 or ECDSA private key in OpenSSH format, as
|
|
183
254
|
* created by `ssh-keygen`
|
|
184
|
-
*
|
|
185
|
-
* @param text The private key, starting with `-----BEGIN OPENSSH PRIVATE KEY-----`
|
|
186
|
-
* @returns The private key
|
|
187
|
-
* @throws {@link KeyParseError} when the key cannot be parsed or is encrypted
|
|
188
|
-
* @throws {@link UnsupportedKeyError} when the key is not an Ed25519 or ECDSA key
|
|
189
255
|
*/
|
|
190
|
-
|
|
191
|
-
const
|
|
192
|
-
if (match === null) {
|
|
193
|
-
throw new KeyParseError("private key was not in OpenSSH format, as created by ssh-keygen (starting with -----BEGIN OPENSSH PRIVATE KEY-----)");
|
|
194
|
-
}
|
|
256
|
+
const parseOpenSshPrivateKey = (body) => {
|
|
257
|
+
const bytes = decodePem(body);
|
|
195
258
|
let container;
|
|
196
259
|
try {
|
|
197
|
-
container = OpenSshPrivateKey.decode(
|
|
260
|
+
container = OpenSshPrivateKey.decode(bytes);
|
|
198
261
|
}
|
|
199
262
|
catch (err) {
|
|
200
263
|
throw new KeyParseError("private key could not be decoded", err);
|
|
@@ -274,4 +337,28 @@ export const parsePrivateKey = (text) => {
|
|
|
274
337
|
}
|
|
275
338
|
throw new UnsupportedKeyError(`CA key type ${keyTypeName(start.type)} is not supported, the CA key must be Ed25519 or ECDSA`);
|
|
276
339
|
};
|
|
340
|
+
/**
|
|
341
|
+
* Parses an unencrypted Ed25519 or ECDSA private key, either in OpenSSH
|
|
342
|
+
* format, as created by `ssh-keygen`, or in PKCS#8 format, as created by
|
|
343
|
+
* `ssh-keygen -m PKCS8` or `openssl genpkey`
|
|
344
|
+
*
|
|
345
|
+
* @param text The private key, starting with `-----BEGIN OPENSSH PRIVATE KEY-----` or `-----BEGIN PRIVATE KEY-----`
|
|
346
|
+
* @returns The private key. A PKCS#8 key has no comment.
|
|
347
|
+
* @throws {@link KeyParseError} when the key cannot be parsed or is encrypted
|
|
348
|
+
* @throws {@link UnsupportedKeyError} when the key is not an Ed25519 or ECDSA key
|
|
349
|
+
*/
|
|
350
|
+
export const parsePrivateKey = async (text) => {
|
|
351
|
+
const openssh = /-----BEGIN OPENSSH PRIVATE KEY-----([\s\S]*?)-----END OPENSSH PRIVATE KEY-----/.exec(text);
|
|
352
|
+
if (openssh?.[1] !== undefined) {
|
|
353
|
+
return parseOpenSshPrivateKey(openssh[1]);
|
|
354
|
+
}
|
|
355
|
+
const pkcs8 = /-----BEGIN PRIVATE KEY-----([\s\S]*?)-----END PRIVATE KEY-----/.exec(text);
|
|
356
|
+
if (pkcs8?.[1] !== undefined) {
|
|
357
|
+
return parsePkcs8PrivateKey(pkcs8[1]);
|
|
358
|
+
}
|
|
359
|
+
if (text.includes("-----BEGIN ENCRYPTED PRIVATE KEY-----")) {
|
|
360
|
+
throw new KeyParseError("encrypted private keys are not supported");
|
|
361
|
+
}
|
|
362
|
+
throw new KeyParseError("private key was not in OpenSSH format, as created by ssh-keygen (starting with -----BEGIN OPENSSH PRIVATE KEY-----), or in PKCS#8 format (starting with -----BEGIN PRIVATE KEY-----)");
|
|
363
|
+
};
|
|
277
364
|
//# sourceMappingURL=keys.js.map
|
package/dist/ssh/keys.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keys.js","sourceRoot":"","sources":["../../src/ssh/keys.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"keys.js","sourceRoot":"","sources":["../../src/ssh/keys.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/api/operations.ts
CHANGED
|
@@ -37,7 +37,8 @@ const caKeyError = (l: Logger, err: unknown): ApiException => {
|
|
|
37
37
|
l.error(err.message)
|
|
38
38
|
return new InternalServerErrorException(err.message)
|
|
39
39
|
case (err instanceof KeyParseError):
|
|
40
|
-
|
|
40
|
+
// the reason is only logged, as it may describe the key
|
|
41
|
+
l.error(`error parsing private key: ${err.message}`, "error", err)
|
|
41
42
|
return new InternalServerErrorException("error parsing private key")
|
|
42
43
|
case (err instanceof ApiException):
|
|
43
44
|
// re-throw any exisiting chanfana error
|
|
@@ -238,9 +239,8 @@ export const issueCertificate = async (c: AppContext, l: Logger, sign: () => Pro
|
|
|
238
239
|
return c.json(response)
|
|
239
240
|
} catch (err) {
|
|
240
241
|
switch (true) {
|
|
241
|
-
case (err instanceof UnsupportedKeyError):
|
|
242
|
-
l
|
|
243
|
-
throw new InternalServerErrorException(err.message)
|
|
242
|
+
case (err instanceof UnsupportedKeyError || err instanceof KeyParseError):
|
|
243
|
+
throw caKeyError(l, err)
|
|
244
244
|
case (err instanceof ApiException):
|
|
245
245
|
// re-throw any exisiting chanfana error
|
|
246
246
|
throw err
|
package/src/logger.ts
CHANGED
|
@@ -1,6 +1,27 @@
|
|
|
1
1
|
import type { SshCaBindings } from "./types.js"
|
|
2
2
|
import { Logger, LogLevel } from "@andrewheberle/ts-slog"
|
|
3
3
|
|
|
4
|
+
// how many causes of an error are logged, in case a chain of causes loops
|
|
5
|
+
const MaxCauseDepth = 5
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Returns a value to log, with an error converted to a plain object. Errors
|
|
9
|
+
* have no enumerable properties, so are otherwise logged as little more than
|
|
10
|
+
* their name.
|
|
11
|
+
*/
|
|
12
|
+
const logValue = (value: unknown, depth = 0): unknown => {
|
|
13
|
+
if (!(value instanceof Error)) {
|
|
14
|
+
return value
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
return {
|
|
18
|
+
name: value.name,
|
|
19
|
+
message: value.message,
|
|
20
|
+
...(value.cause === undefined || depth >= MaxCauseDepth ? {} : { cause: logValue(value.cause, depth + 1) }),
|
|
21
|
+
stack: value.stack,
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
4
25
|
export const logger = (env: SshCaBindings): Logger => {
|
|
5
26
|
const level = env.LOG_LEVEL === "none"
|
|
6
27
|
? LogLevel.None
|
|
@@ -12,5 +33,8 @@ export const logger = (env: SshCaBindings): Logger => {
|
|
|
12
33
|
? LogLevel.Debug
|
|
13
34
|
: LogLevel.Info
|
|
14
35
|
|
|
15
|
-
return new Logger({
|
|
36
|
+
return new Logger({
|
|
37
|
+
minLevel: level,
|
|
38
|
+
logHandler: (output) => console.log(Object.fromEntries(Object.entries(output).map(([key, value]) => [key, logValue(value)]))),
|
|
39
|
+
})
|
|
16
40
|
}
|
package/src/ssh/keys.ts
CHANGED
|
@@ -223,24 +223,97 @@ const keyTypeName = (type: string): string => {
|
|
|
223
223
|
return type.replace(/^ssh-/, "").replace(/^ecdsa-sha2-.*$/, "ecdsa")
|
|
224
224
|
}
|
|
225
225
|
|
|
226
|
+
// decodes the base64 body of a PEM block
|
|
227
|
+
const decodePem = (body: string): Uint8Array<ArrayBuffer> => {
|
|
228
|
+
try {
|
|
229
|
+
return new Uint8Array(base64.decode(body.replace(/\s+/g, "")))
|
|
230
|
+
} catch (err) {
|
|
231
|
+
throw new KeyParseError("private key could not be decoded", err)
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
/** The algorithms that an unencrypted PKCS#8 private key is imported as, in the order they are tried */
|
|
236
|
+
const Pkcs8Algorithms: readonly ({ type: "ed25519", algorithm: Algorithm } | { type: "ecdsa", curve: EcdsaCurve, algorithm: EcKeyImportParams })[] = [
|
|
237
|
+
{ type: "ed25519", algorithm: { name: "Ed25519" } },
|
|
238
|
+
...(["nistp256", "nistp384", "nistp521"] as const).map((curve) => ({ type: "ecdsa" as const, curve, algorithm: { name: "ECDSA", namedCurve: EcdsaCurves[curve].namedCurve } })),
|
|
239
|
+
]
|
|
240
|
+
|
|
241
|
+
// imports a PKCS#8 private key, returning undefined if it is not a key for
|
|
242
|
+
// the algorithm
|
|
243
|
+
const importPkcs8 = async (der: Uint8Array<ArrayBuffer>, algorithm: Algorithm | EcKeyImportParams | RsaHashedImportParams): Promise<CryptoKey | undefined> => {
|
|
244
|
+
try {
|
|
245
|
+
return await crypto.subtle.importKey("pkcs8", der, algorithm, true, ["sign"])
|
|
246
|
+
} catch {
|
|
247
|
+
return undefined
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
// returns a member of a JWK exported by WebCrypto, which is always present
|
|
252
|
+
// for the key types that are exported
|
|
253
|
+
const jwkMember = (jwk: JsonWebKey, name: "d" | "x" | "y"): string => {
|
|
254
|
+
const value = jwk[name]
|
|
255
|
+
if (value === undefined) {
|
|
256
|
+
throw new KeyParseError(`private key was missing "${name}" when exported`)
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
return value
|
|
260
|
+
}
|
|
261
|
+
|
|
226
262
|
/**
|
|
227
|
-
* Parses an unencrypted Ed25519 or ECDSA private key in
|
|
228
|
-
* created by `ssh-keygen`
|
|
229
|
-
*
|
|
230
|
-
* @param text The private key, starting with `-----BEGIN OPENSSH PRIVATE KEY-----`
|
|
231
|
-
* @returns The private key
|
|
232
|
-
* @throws {@link KeyParseError} when the key cannot be parsed or is encrypted
|
|
233
|
-
* @throws {@link UnsupportedKeyError} when the key is not an Ed25519 or ECDSA key
|
|
263
|
+
* Parses an unencrypted Ed25519 or ECDSA private key in PKCS#8 format, as
|
|
264
|
+
* created by `ssh-keygen -m PKCS8` or `openssl genpkey`
|
|
234
265
|
*/
|
|
235
|
-
|
|
236
|
-
const
|
|
237
|
-
|
|
238
|
-
|
|
266
|
+
const parsePkcs8PrivateKey = async (body: string): Promise<PrivateKey> => {
|
|
267
|
+
const der = decodePem(body)
|
|
268
|
+
|
|
269
|
+
for (const candidate of Pkcs8Algorithms) {
|
|
270
|
+
const cryptoKey = await importPkcs8(der, candidate.algorithm)
|
|
271
|
+
if (cryptoKey === undefined) {
|
|
272
|
+
continue
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
const jwk = await crypto.subtle.exportKey("jwk", cryptoKey)
|
|
276
|
+
const d = jwkMember(jwk, "d")
|
|
277
|
+
const x = jwkMember(jwk, "x")
|
|
278
|
+
|
|
279
|
+
if (candidate.type === "ed25519") {
|
|
280
|
+
return {
|
|
281
|
+
type: "ed25519",
|
|
282
|
+
publicKey: new PublicKey(P.struct({ type: SSHText, key: SSHBytes }).encode({ type: "ssh-ed25519", key: base64urlnopad.decode(x) })),
|
|
283
|
+
jwk: { kty: "OKP", crv: "Ed25519", d, x },
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
const y = jwkMember(jwk, "y")
|
|
288
|
+
const point = new Uint8Array([0x04, ...base64urlnopad.decode(x), ...base64urlnopad.decode(y)])
|
|
289
|
+
|
|
290
|
+
return {
|
|
291
|
+
type: "ecdsa",
|
|
292
|
+
curve: candidate.curve,
|
|
293
|
+
publicKey: new PublicKey(P.struct({ type: SSHText, curve: SSHText, key: SSHBytes }).encode({ type: `ecdsa-sha2-${candidate.curve}`, curve: candidate.curve, key: point })),
|
|
294
|
+
jwk: { kty: "EC", crv: EcdsaCurves[candidate.curve].namedCurve, d, x, y },
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
// RSA keys are recognised only to give a clearer error
|
|
299
|
+
if (await importPkcs8(der, { name: "RSASSA-PKCS1-v1_5", hash: "SHA-256" }) !== undefined) {
|
|
300
|
+
throw new UnsupportedKeyError("CA key type rsa is not supported, the CA key must be Ed25519 or ECDSA")
|
|
239
301
|
}
|
|
240
302
|
|
|
303
|
+
// WebCrypto does not say why a key could not be imported, so a key of
|
|
304
|
+
// another type cannot be told apart from one that is corrupt
|
|
305
|
+
throw new KeyParseError("PKCS#8 private key could not be imported as an Ed25519 or ECDSA (nistp256, nistp384 or nistp521) key")
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
/**
|
|
309
|
+
* Parses an unencrypted Ed25519 or ECDSA private key in OpenSSH format, as
|
|
310
|
+
* created by `ssh-keygen`
|
|
311
|
+
*/
|
|
312
|
+
const parseOpenSshPrivateKey = (body: string): PrivateKey => {
|
|
313
|
+
const bytes = decodePem(body)
|
|
241
314
|
let container: P.UnwrapCoder<typeof OpenSshPrivateKey>
|
|
242
315
|
try {
|
|
243
|
-
container = OpenSshPrivateKey.decode(
|
|
316
|
+
container = OpenSshPrivateKey.decode(bytes)
|
|
244
317
|
} catch (err) {
|
|
245
318
|
throw new KeyParseError("private key could not be decoded", err)
|
|
246
319
|
}
|
|
@@ -325,3 +398,30 @@ export const parsePrivateKey = (text: string): PrivateKey => {
|
|
|
325
398
|
throw new UnsupportedKeyError(`CA key type ${keyTypeName(start.type)} is not supported, the CA key must be Ed25519 or ECDSA`)
|
|
326
399
|
}
|
|
327
400
|
|
|
401
|
+
/**
|
|
402
|
+
* Parses an unencrypted Ed25519 or ECDSA private key, either in OpenSSH
|
|
403
|
+
* format, as created by `ssh-keygen`, or in PKCS#8 format, as created by
|
|
404
|
+
* `ssh-keygen -m PKCS8` or `openssl genpkey`
|
|
405
|
+
*
|
|
406
|
+
* @param text The private key, starting with `-----BEGIN OPENSSH PRIVATE KEY-----` or `-----BEGIN PRIVATE KEY-----`
|
|
407
|
+
* @returns The private key. A PKCS#8 key has no comment.
|
|
408
|
+
* @throws {@link KeyParseError} when the key cannot be parsed or is encrypted
|
|
409
|
+
* @throws {@link UnsupportedKeyError} when the key is not an Ed25519 or ECDSA key
|
|
410
|
+
*/
|
|
411
|
+
export const parsePrivateKey = async (text: string): Promise<PrivateKey> => {
|
|
412
|
+
const openssh = /-----BEGIN OPENSSH PRIVATE KEY-----([\s\S]*?)-----END OPENSSH PRIVATE KEY-----/.exec(text)
|
|
413
|
+
if (openssh?.[1] !== undefined) {
|
|
414
|
+
return parseOpenSshPrivateKey(openssh[1])
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
const pkcs8 = /-----BEGIN PRIVATE KEY-----([\s\S]*?)-----END PRIVATE KEY-----/.exec(text)
|
|
418
|
+
if (pkcs8?.[1] !== undefined) {
|
|
419
|
+
return parsePkcs8PrivateKey(pkcs8[1])
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
if (text.includes("-----BEGIN ENCRYPTED PRIVATE KEY-----")) {
|
|
423
|
+
throw new KeyParseError("encrypted private keys are not supported")
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
throw new KeyParseError("private key was not in OpenSSH format, as created by ssh-keygen (starting with -----BEGIN OPENSSH PRIVATE KEY-----), or in PKCS#8 format (starting with -----BEGIN PRIVATE KEY-----)")
|
|
427
|
+
}
|