@andrewheberle/serverless-ssh-ca 0.17.15 → 0.17.16
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 +2 -2
- package/dist/api/v3/index.js +1 -1
- package/dist/api/v3/index.js.map +1 -1
- package/dist/api/v3/schema.d.ts +38 -1
- package/dist/api/v3/schema.d.ts.map +1 -1
- package/dist/api/v3/schema.js +61 -57
- package/dist/api/v3/schema.js.map +1 -1
- package/dist/certificate.d.ts.map +1 -1
- package/dist/certificate.js +10 -6
- package/dist/certificate.js.map +1 -1
- package/dist/db/index.js +2 -2
- package/dist/db/index.js.map +1 -1
- package/dist/krl.js +1 -1
- package/dist/krl.js.map +1 -1
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +12 -1
- package/dist/logger.js.map +1 -1
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +8 -1
- package/dist/router.js.map +1 -1
- package/dist/types.d.ts +7 -8
- package/dist/types.d.ts.map +1 -1
- package/dist/utils.d.ts +1 -1
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +10 -11
- package/dist/utils.js.map +1 -1
- package/package.json +13 -5
- package/src/api/v3/index.ts +1 -1
- package/src/api/v3/schema.ts +69 -61
- package/src/certificate.ts +12 -6
- package/src/db/index.ts +2 -2
- package/src/krl.ts +1 -1
- package/src/logger.ts +13 -3
- package/src/router.ts +8 -1
- package/src/types.ts +7 -8
- package/src/utils.ts +11 -13
package/dist/types.d.ts
CHANGED
|
@@ -25,19 +25,18 @@ export interface SshCaBindings {
|
|
|
25
25
|
PRIVATE_KEY: SecretsStoreSecret;
|
|
26
26
|
SSH_CERTIFICATE_EXTENSIONS: string;
|
|
27
27
|
SSH_CERTIFICATE_LIFETIME: string;
|
|
28
|
-
SSH_CERTIFICATE_INCLUDE_SELF
|
|
29
|
-
SSH_CERTIFICATE_PRINCIPALS
|
|
28
|
+
SSH_CERTIFICATE_INCLUDE_SELF?: string | boolean;
|
|
29
|
+
SSH_CERTIFICATE_PRINCIPALS?: string | string[];
|
|
30
30
|
SSH_HOST_CERTIFICATE_LIFETIME: string;
|
|
31
|
-
SSH_HOST_CERTIFICATE_ALLOWED_EMAILS
|
|
32
|
-
SSH_HOST_CERTIFICATE_ALLOWED_ROLES
|
|
31
|
+
SSH_HOST_CERTIFICATE_ALLOWED_EMAILS?: string | string[];
|
|
32
|
+
SSH_HOST_CERTIFICATE_ALLOWED_ROLES?: string | string[];
|
|
33
33
|
ISSUER_DN: string;
|
|
34
34
|
JWT_JWKS_URL: string;
|
|
35
|
-
JWT_AUD
|
|
35
|
+
JWT_AUD?: string | string[];
|
|
36
36
|
JWT_ISSUER: string;
|
|
37
|
-
JWT_ALGORITHMS: string;
|
|
37
|
+
JWT_ALGORITHMS: string | string[];
|
|
38
38
|
JWT_SSH_CERTIFICATE_PRINCIPALS_CLAIM: string;
|
|
39
|
-
SSH_HOST_CERTIFICATE_ALLOWED_ROLES_CLAIM: string;
|
|
40
39
|
CERTIFICATE_REQUEST_TIME_SKEW_MAX: string;
|
|
41
|
-
LOG_LEVEL
|
|
40
|
+
LOG_LEVEL?: string;
|
|
42
41
|
}
|
|
43
42
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAA;AAGjC,MAAM,MAAM,wBAAwB,GAAG;IACnC,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,yBAAyB,GAAG;IACpC,WAAW,EAAE,MAAM,CAAA;CACtB,CAAA;AAGD,MAAM,MAAM,4BAA4B,GAAG;IACvC,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;IACX,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,CAAA;CACnC,GAAG,UAAU,CAAA;AAEd,MAAM,MAAM,YAAY,GAAG;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC,WAAW,CAAC,CAAA;CAC5B,CAAA;AAED,MAAM,WAAW,aAAa;IAC1B,EAAE,EAAE,UAAU,CAAA;IACd,wBAAwB,EAAE,MAAM,CAAA;IAChC,WAAW,EAAE,kBAAkB,CAAA;IAC/B,0BAA0B,EAAE,MAAM,CAAA;IAClC,wBAAwB,EAAE,MAAM,CAAA;IAChC,4BAA4B,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAA;AAGjC,MAAM,MAAM,wBAAwB,GAAG;IACnC,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,yBAAyB,GAAG;IACpC,WAAW,EAAE,MAAM,CAAA;CACtB,CAAA;AAGD,MAAM,MAAM,4BAA4B,GAAG;IACvC,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;IACX,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,CAAA;CACnC,GAAG,UAAU,CAAA;AAEd,MAAM,MAAM,YAAY,GAAG;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC,WAAW,CAAC,CAAA;CAC5B,CAAA;AAED,MAAM,WAAW,aAAa;IAC1B,EAAE,EAAE,UAAU,CAAA;IACd,wBAAwB,EAAE,MAAM,CAAA;IAChC,WAAW,EAAE,kBAAkB,CAAA;IAC/B,0BAA0B,EAAE,MAAM,CAAA;IAClC,wBAAwB,EAAE,MAAM,CAAA;IAChC,4BAA4B,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;IAC/C,0BAA0B,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IAC9C,6BAA6B,EAAE,MAAM,CAAA;IACrC,mCAAmC,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IACvD,kCAAkC,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IACtD,SAAS,EAAE,MAAM,CAAA;IACpB,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IAC3B,UAAU,EAAE,MAAM,CAAA;IAClB,cAAc,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IACjC,oCAAoC,EAAE,MAAM,CAAA;IAC5C,iCAAiC,EAAE,MAAM,CAAA;IACzC,SAAS,CAAC,EAAE,MAAM,CAAA;CAClB"}
|
package/dist/utils.d.ts
CHANGED
|
@@ -55,7 +55,7 @@ type ParsedRevokeCertificate = {
|
|
|
55
55
|
proof: ProofOfPossession;
|
|
56
56
|
};
|
|
57
57
|
export declare const refineRevokeCertificate: (env: SshCaBindings, val: ParsedRevokeCertificate, ctx: z.RefinementCtx) => Promise<never>;
|
|
58
|
-
export declare const split: (v
|
|
58
|
+
export declare const split: (v?: string | string[]) => string[];
|
|
59
59
|
export declare const getPublic: (env: SshCaBindings, key?: PrivateKey) => Promise<Key>;
|
|
60
60
|
export {};
|
|
61
61
|
//# sourceMappingURL=utils.d.ts.map
|
package/dist/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAE5C,OAAO,EAAE,WAAW,EAAE,GAAG,EAAqF,UAAU,EAAE,MAAM,OAAO,CAAA;AACvI,OAAO,CAAC,MAAM,KAAK,CAAA;AAEnB,OAAO,EAAE,4BAA4B,EAAE,MAAM,SAAS,CAAA;AACtD,OAAO,EAAE,wBAAwB,EAAE,iBAAiB,EAAwB,MAAM,SAAS,CAAA;AAC3F,OAAO,KAAK,EAAE,SAAS,IAAI,WAAW,EAAE,MAAM,MAAM,CAAA;AAIpD,eAAO,MAAM,UAAU,GAAI,KAAK,CAAC,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,KAAK,OAAO,UAQ7E,CAAA;AAED,eAAO,MAAM,0BAA0B,GAAI,KAAK,aAAa,EAAE,KAAK,MAAM,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,KAAG,iBAAiB,GAAG,KA0BpI,CAAA;AAED,KAAK,WAAW,GAAG;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;CACX,CAAA;AAED,eAAO,MAAM,4BAA4B,GAAU,KAAK,aAAa,EAAE,KAAK,MAAM,EAAE,KAAK,CAAC,CAAC,aAAa,KAAG,OAAO,CAAC,WAAW,GAAG,KAAK,CAyCrI,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAI,KAAK,MAAM,GAAG,MAAM,CAAC,eAAe,CAAC,EAAE,KAAK,CAAC,CAAC,aAAa,KAAG,GAAG,GAAG,KA+BtG,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAI,KAAK,aAAa,EAAE,SAAS,4BAA4B,EAAE,QAAQ,MAAM,KAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAE5C,OAAO,EAAE,WAAW,EAAE,GAAG,EAAqF,UAAU,EAAE,MAAM,OAAO,CAAA;AACvI,OAAO,CAAC,MAAM,KAAK,CAAA;AAEnB,OAAO,EAAE,4BAA4B,EAAE,MAAM,SAAS,CAAA;AACtD,OAAO,EAAE,wBAAwB,EAAE,iBAAiB,EAAwB,MAAM,SAAS,CAAA;AAC3F,OAAO,KAAK,EAAE,SAAS,IAAI,WAAW,EAAE,MAAM,MAAM,CAAA;AAIpD,eAAO,MAAM,UAAU,GAAI,KAAK,CAAC,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,KAAK,OAAO,UAQ7E,CAAA;AAED,eAAO,MAAM,0BAA0B,GAAI,KAAK,aAAa,EAAE,KAAK,MAAM,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,KAAG,iBAAiB,GAAG,KA0BpI,CAAA;AAED,KAAK,WAAW,GAAG;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;CACX,CAAA;AAED,eAAO,MAAM,4BAA4B,GAAU,KAAK,aAAa,EAAE,KAAK,MAAM,EAAE,KAAK,CAAC,CAAC,aAAa,KAAG,OAAO,CAAC,WAAW,GAAG,KAAK,CAyCrI,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAI,KAAK,MAAM,GAAG,MAAM,CAAC,eAAe,CAAC,EAAE,KAAK,CAAC,CAAC,aAAa,KAAG,GAAG,GAAG,KA+BtG,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAI,KAAK,aAAa,EAAE,SAAS,4BAA4B,EAAE,QAAQ,MAAM,KAAG,MAAM,EA0BpH,CAAA;AAED,KAAK,aAAa,GAAG;IACpB,GAAG,EAAE,MAAM,CAAA;IACX,UAAU,EAAE,MAAM,EAAE,CAAA;CACpB,CAAA;AAED,eAAO,MAAM,aAAa,GAAU,KAAK,aAAa,EAAE,KAAK,MAAM,GAAG,SAAS,EAAE,QAAQ,MAAM,KAAG,OAAO,CAAC,aAAa,CActH,CAAA;AAED,eAAO,MAAM,sBAAsB,GAAU,KAAK,aAAa,EAAE,KAAK,MAAM,EAAE,KAAK,CAAC,CAAC,aAAa,KAAG,OAAO,CAAC,aAAa,GAAG,KAAK,CAajI,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,GAAI,KAAK,MAAM,GAAG,MAAM,CAAC,eAAe,CAAC,EAAE,KAAK,CAAC,CAAC,aAAa,KAAG,WAAW,GAAG,KA+BhH,CAAA;AAED,KAAK,wBAAwB,GAAG;IAC/B,KAAK,EAAE,iBAAiB,CAAA;IACxB,UAAU,EAAE,GAAG,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,aAAa,CAAA;IACvB,UAAU,EAAE,MAAM,EAAE,CAAA;CACpB,CAAA;AAED,eAAO,MAAM,wBAAwB,GAAU,KAAK,aAAa,EAAE,KAAK,wBAAwB,EAAE,KAAK,CAAC,CAAC,aAAa,KAAG,OAAO,CAAC,KAAK,CAmBrI,CAAA;AAED,eAAO,MAAM,iCAAiC,GAAI,KAAK,aAAa,EAAE,KAAK,MAAM,EAAE,KAAK,CAAC,CAAC,aAAa,KAAG,wBAAwB,GAAG,KAYpI,CAAA;AAED,KAAK,sBAAsB,GAAG;IAC7B,UAAU,EAAE,GAAG,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,KAAK,4BAA4B,GAAG;IACnC,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,KAAK,EAAE,iBAAiB,CAAA;CACxB,GAAG,sBAAsB,CAAA;AAE1B,eAAO,MAAM,4BAA4B,GAAU,KAAK,aAAa,EAAE,KAAK,4BAA4B,EAAE,KAAK,CAAC,CAAC,aAAa,KAAG,OAAO,CAAC,KAAK,CA4B7I,CAAA;AAED,KAAK,4BAA4B,GAAG;IACnC,WAAW,EAAE,WAAW,CAAA;IACxB,KAAK,EAAE,wBAAwB,CAAA;CAC/B,GAAG,sBAAsB,CAAA;AAE1B,eAAO,MAAM,4BAA4B,GAAU,KAAK,aAAa,EAAE,WAAW,OAAO,WAAW,EAAE,KAAK,4BAA4B,EAAE,KAAK,CAAC,CAAC,aAAa,KAAG,OAAO,CAAC,KAAK,CAoC5K,CAAA;AAED,KAAK,uBAAuB,GAAG;IAC9B,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,GAAG,CAAA;IACf,KAAK,EAAE,iBAAiB,CAAA;CACxB,CAAA;AAED,eAAO,MAAM,uBAAuB,GAAU,KAAK,aAAa,EAAE,KAAK,uBAAuB,EAAE,KAAK,CAAC,CAAC,aAAa,KAAG,OAAO,CAAC,KAAK,CAmBnI,CAAA;AAED,eAAO,MAAM,KAAK,GAAI,IAAI,MAAM,GAAG,MAAM,EAAE,KAAG,MAAM,EAQnD,CAAA;AAED,eAAO,MAAM,SAAS,GAAU,KAAK,aAAa,EAAE,MAAM,UAAU,KAAG,OAAO,CAAC,GAAG,CAejF,CAAA"}
|
package/dist/utils.js
CHANGED
|
@@ -113,10 +113,6 @@ export const identityPrincipals = (env, payload, claim) => {
|
|
|
113
113
|
claim = env.JWT_SSH_CERTIFICATE_PRINCIPALS_CLAIM;
|
|
114
114
|
}
|
|
115
115
|
const l = logger(env);
|
|
116
|
-
if (claim === "__proto__" || claim === "prototype" || claim === "constructor") {
|
|
117
|
-
l.warn("invalid principals claim configured", "claim", claim);
|
|
118
|
-
return [];
|
|
119
|
-
}
|
|
120
116
|
const p = payload[claim];
|
|
121
117
|
if (p === undefined) {
|
|
122
118
|
l.warn("claim was missing despite being set in CA config", "claim", claim);
|
|
@@ -136,8 +132,8 @@ export const parseIdentity = async (env, jwt, claim) => {
|
|
|
136
132
|
if (jwt === undefined) {
|
|
137
133
|
throw new Error("missing identity token");
|
|
138
134
|
}
|
|
139
|
-
const aud =
|
|
140
|
-
const { payload } = await verifyJWT(env, jwt, { aud: aud });
|
|
135
|
+
const aud = split(env.JWT_AUD);
|
|
136
|
+
const { payload } = await verifyJWT(env, jwt, { aud: aud.length === 0 ? undefined : aud });
|
|
141
137
|
const principals = identityPrincipals(env, payload, claim);
|
|
142
138
|
return {
|
|
143
139
|
sub: payload.sub,
|
|
@@ -149,7 +145,7 @@ export const transformIdentityToken = async (env, val, ctx) => {
|
|
|
149
145
|
const identity = await parseIdentity(env, val, env.JWT_SSH_CERTIFICATE_PRINCIPALS_CLAIM);
|
|
150
146
|
return identity;
|
|
151
147
|
}
|
|
152
|
-
catch
|
|
148
|
+
catch {
|
|
153
149
|
ctx.issues.push({
|
|
154
150
|
code: "custom",
|
|
155
151
|
message: "problem parsing identity token",
|
|
@@ -305,10 +301,13 @@ export const refineRevokeCertificate = async (env, val, ctx) => {
|
|
|
305
301
|
}
|
|
306
302
|
};
|
|
307
303
|
export const split = (v) => {
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
304
|
+
return v === undefined
|
|
305
|
+
? []
|
|
306
|
+
: typeof v === "string"
|
|
307
|
+
? v === ""
|
|
308
|
+
? []
|
|
309
|
+
: v.split(",")
|
|
310
|
+
: v;
|
|
312
311
|
};
|
|
313
312
|
export const getPublic = async (env, key) => {
|
|
314
313
|
if (key === undefined) {
|
package/dist/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@andrewheberle/serverless-ssh-ca",
|
|
3
|
-
"version": "0.17.
|
|
3
|
+
"version": "0.17.16",
|
|
4
4
|
"description": "A serverless SSH CA built on Cloudflare Workers",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -17,12 +17,17 @@
|
|
|
17
17
|
"scripts": {
|
|
18
18
|
"build": "tsc",
|
|
19
19
|
"coverage": "vitest run --coverage",
|
|
20
|
-
"
|
|
21
|
-
"test:watch": "vitest",
|
|
20
|
+
"lint": "eslint",
|
|
22
21
|
"prepublishOnly": "npm run build",
|
|
23
22
|
"release": "release-it",
|
|
24
|
-
"release:ci": "release
|
|
25
|
-
"release:
|
|
23
|
+
"release:ci": "npm run release:patch",
|
|
24
|
+
"release:ci:major": "release-it major --ci",
|
|
25
|
+
"release:ci:minor": "release-it minor --ci",
|
|
26
|
+
"release:ci:patch": "release-it patch --ci",
|
|
27
|
+
"release:dryrun": "release-it --dry-run",
|
|
28
|
+
"schema": "node --require tsx/cjs scripts/export-schema.cjs",
|
|
29
|
+
"test": "vitest run",
|
|
30
|
+
"test:watch": "vitest"
|
|
26
31
|
},
|
|
27
32
|
"dependencies": {
|
|
28
33
|
"@andrewheberle/ts-slog": "^1.3.0",
|
|
@@ -36,10 +41,13 @@
|
|
|
36
41
|
"zod": "^4.0.0"
|
|
37
42
|
},
|
|
38
43
|
"devDependencies": {
|
|
44
|
+
"@eslint/js": "^10.0.1",
|
|
39
45
|
"@types/sshpk": "^1.17.4",
|
|
40
46
|
"@vitest/coverage-v8": "^4.1.7",
|
|
47
|
+
"eslint": "^10.4.1",
|
|
41
48
|
"tsx": "^4.21.0",
|
|
42
49
|
"typescript": "^6.0.0",
|
|
50
|
+
"typescript-eslint": "^8.61.0",
|
|
43
51
|
"vitest": "^4.1.7"
|
|
44
52
|
},
|
|
45
53
|
"repository": {
|
package/src/api/v3/index.ts
CHANGED
|
@@ -148,7 +148,7 @@ const UserCertificateRequestEndpoint = (env: SshCaBindings) => {
|
|
|
148
148
|
|
|
149
149
|
const RevocationListEndpoint = (env: SshCaBindings) => {
|
|
150
150
|
return class extends OpenAPIRoute {
|
|
151
|
-
override schema = createRevocationListEndpointSchema(
|
|
151
|
+
override schema = createRevocationListEndpointSchema()
|
|
152
152
|
|
|
153
153
|
override async handle(c: AppContext) {
|
|
154
154
|
const data = await this.getValidatedData<typeof this.schema>()
|
package/src/api/v3/schema.ts
CHANGED
|
@@ -59,18 +59,18 @@ export const createIdentityTokenSchema = (env: SshCaBindings) => (
|
|
|
59
59
|
)
|
|
60
60
|
|
|
61
61
|
export const createAccessTokenSchema = (env: SshCaBindings) => (
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
62
|
+
z.string()
|
|
63
|
+
.meta({
|
|
64
|
+
description: "Access Token JWT from OIDC IdP",
|
|
65
|
+
example: "Bearer eyJ..."
|
|
66
|
+
})
|
|
67
|
+
.transform((val, ctx) => transformAuthorizationHeader(env, val, ctx))
|
|
68
68
|
)
|
|
69
69
|
|
|
70
70
|
const krl = openapiStringByte
|
|
71
71
|
.meta({ description: "Key Revocation List" })
|
|
72
72
|
|
|
73
|
-
const createHeaderSchema = (env: SshCaBindings) => (
|
|
73
|
+
export const createHeaderSchema = (env: SshCaBindings) => (
|
|
74
74
|
z.object({
|
|
75
75
|
"Authorization": createAccessTokenSchema(env)
|
|
76
76
|
})
|
|
@@ -93,28 +93,30 @@ export const CaPublicKeyEndpointSchema = {
|
|
|
93
93
|
}
|
|
94
94
|
}
|
|
95
95
|
|
|
96
|
+
export const userCertificateRequestEndpointBodySchema = (env: SshCaBindings) => (
|
|
97
|
+
z.object({
|
|
98
|
+
public_key: publicKey,
|
|
99
|
+
proof: proofOfPossession
|
|
100
|
+
.transform((val, ctx) => transformProofOfPossession(env, val, ctx)),
|
|
101
|
+
identity: createIdentityTokenSchema(env),
|
|
102
|
+
extensions: z.array(z.string())
|
|
103
|
+
.default(split(env.SSH_CERTIFICATE_EXTENSIONS))
|
|
104
|
+
.meta({ description: "Extensions to include in the issued SSH certificate" }),
|
|
105
|
+
lifetime: z.int()
|
|
106
|
+
.min(seconds("5 minutes"))
|
|
107
|
+
.max(seconds(env.SSH_CERTIFICATE_LIFETIME))
|
|
108
|
+
.default(seconds(env.SSH_CERTIFICATE_LIFETIME))
|
|
109
|
+
.meta({ description: "Lifetime of issued SSH certificate" }),
|
|
110
|
+
})
|
|
111
|
+
.superRefine((val, ctx) => refineCertificateRequest(env, val, ctx))
|
|
112
|
+
.openapi("User Certificate Request")
|
|
113
|
+
)
|
|
114
|
+
|
|
96
115
|
export const createUserCertificateRequestEndpointSchema = (env: SshCaBindings) => ({
|
|
97
116
|
security: [{ oidcAuth: [] }],
|
|
98
117
|
request: {
|
|
99
118
|
headers: createHeaderSchema(env),
|
|
100
|
-
body: contentJson(
|
|
101
|
-
z.object({
|
|
102
|
-
public_key: publicKey,
|
|
103
|
-
proof: proofOfPossession
|
|
104
|
-
.transform((val, ctx) => transformProofOfPossession(env, val, ctx)),
|
|
105
|
-
identity: createIdentityTokenSchema(env),
|
|
106
|
-
extensions: z.array(z.string())
|
|
107
|
-
.default(split(env.SSH_CERTIFICATE_EXTENSIONS))
|
|
108
|
-
.meta({ description: "Extensions to include in the issued SSH certificate" }),
|
|
109
|
-
lifetime: z.int()
|
|
110
|
-
.min(seconds("5 minutes"))
|
|
111
|
-
.max(seconds(env.SSH_CERTIFICATE_LIFETIME))
|
|
112
|
-
.default(seconds(env.SSH_CERTIFICATE_LIFETIME))
|
|
113
|
-
.meta({ description: "Lifetime of issued SSH certificate" }),
|
|
114
|
-
})
|
|
115
|
-
.superRefine((val, ctx) => refineCertificateRequest(env, val, ctx))
|
|
116
|
-
.openapi("User Certificate Request")
|
|
117
|
-
)
|
|
119
|
+
body: contentJson(userCertificateRequestEndpointBodySchema(env)),
|
|
118
120
|
},
|
|
119
121
|
responses: {
|
|
120
122
|
"200": {
|
|
@@ -133,7 +135,7 @@ export const createUserCertificateRequestEndpointSchema = (env: SshCaBindings) =
|
|
|
133
135
|
}
|
|
134
136
|
})
|
|
135
137
|
|
|
136
|
-
export const createRevocationListEndpointSchema = (
|
|
138
|
+
export const createRevocationListEndpointSchema = () => ({
|
|
137
139
|
request: {
|
|
138
140
|
params: z.object({
|
|
139
141
|
certificateType: z.enum(["user", "host"])
|
|
@@ -153,12 +155,8 @@ export const createRevocationListEndpointSchema = (env: SshCaBindings) => ({
|
|
|
153
155
|
}
|
|
154
156
|
})
|
|
155
157
|
|
|
156
|
-
export const
|
|
157
|
-
|
|
158
|
-
request: {
|
|
159
|
-
headers: createHeaderSchema(env),
|
|
160
|
-
body: contentJson(
|
|
161
|
-
z.object({
|
|
158
|
+
export const hostCertificateRequestEndpointBodySchema = (env: SshCaBindings) => (
|
|
159
|
+
z.object({
|
|
162
160
|
public_key: publicKey,
|
|
163
161
|
proof: proofOfPossession
|
|
164
162
|
.transform((val, ctx) => transformProofOfPossession(env, val, ctx)),
|
|
@@ -173,7 +171,13 @@ export const createHostCertificateRequestEndpointSchema = (env: SshCaBindings) =
|
|
|
173
171
|
})
|
|
174
172
|
.superRefine((val, ctx) => refineHostCertificateRequest(env, val, ctx))
|
|
175
173
|
.openapi("Host Certificate Request")
|
|
176
|
-
|
|
174
|
+
)
|
|
175
|
+
|
|
176
|
+
export const createHostCertificateRequestEndpointSchema = (env: SshCaBindings) => ({
|
|
177
|
+
security: [{ oidcAuth: [] }],
|
|
178
|
+
request: {
|
|
179
|
+
headers: createHeaderSchema(env),
|
|
180
|
+
body: contentJson(hostCertificateRequestEndpointBodySchema(env))
|
|
177
181
|
},
|
|
178
182
|
responses: {
|
|
179
183
|
"200": {
|
|
@@ -192,25 +196,27 @@ export const createHostCertificateRequestEndpointSchema = (env: SshCaBindings) =
|
|
|
192
196
|
}
|
|
193
197
|
})
|
|
194
198
|
|
|
199
|
+
export const hostCertificateRenewEndpointBodySchema = (env: SshCaBindings) => (
|
|
200
|
+
z.object({
|
|
201
|
+
certificate: openapiStringByte
|
|
202
|
+
.transform(transformCertificate)
|
|
203
|
+
.meta({ description: "SSH certificate to renew" }),
|
|
204
|
+
public_key: publicKey,
|
|
205
|
+
proof: proofOfPossession
|
|
206
|
+
.transform((val, ctx) => transformRenewalProofOfPossession(env, val, ctx)),
|
|
207
|
+
lifetime: z.int()
|
|
208
|
+
.min(seconds("24 hours"))
|
|
209
|
+
.max(seconds(env.SSH_HOST_CERTIFICATE_LIFETIME))
|
|
210
|
+
.default(seconds(env.SSH_HOST_CERTIFICATE_LIFETIME))
|
|
211
|
+
.meta({ description: "Lifetime of renewed Host SSH certificate" }),
|
|
212
|
+
})
|
|
213
|
+
.superRefine((val, ctx) => refineHostCertificateRenewal(env, isRevoked, val, ctx))
|
|
214
|
+
.openapi("Host Certificate Renew")
|
|
215
|
+
)
|
|
216
|
+
|
|
195
217
|
export const createHostCertificateRenewEndpointSchema = (env: SshCaBindings) => ({
|
|
196
218
|
request: {
|
|
197
|
-
body: contentJson(
|
|
198
|
-
z.object({
|
|
199
|
-
certificate: openapiStringByte
|
|
200
|
-
.transform(transformCertificate)
|
|
201
|
-
.meta({ description: "SSH certificate to renew" }),
|
|
202
|
-
public_key: publicKey,
|
|
203
|
-
proof: proofOfPossession
|
|
204
|
-
.transform((val, ctx) => transformRenewalProofOfPossession(env, val, ctx)),
|
|
205
|
-
lifetime: z.int()
|
|
206
|
-
.min(seconds("24 hours"))
|
|
207
|
-
.max(seconds(env.SSH_HOST_CERTIFICATE_LIFETIME))
|
|
208
|
-
.default(seconds(env.SSH_HOST_CERTIFICATE_LIFETIME))
|
|
209
|
-
.meta({ description: "Lifetime of renewed Host SSH certificate" }),
|
|
210
|
-
})
|
|
211
|
-
.superRefine((val, ctx) => refineHostCertificateRenewal(env, isRevoked, val, ctx))
|
|
212
|
-
.openapi("Host Certificate Renew")
|
|
213
|
-
)
|
|
219
|
+
body: contentJson(hostCertificateRenewEndpointBodySchema(env))
|
|
214
220
|
},
|
|
215
221
|
responses: {
|
|
216
222
|
"200": {
|
|
@@ -229,22 +235,24 @@ export const createHostCertificateRenewEndpointSchema = (env: SshCaBindings) =>
|
|
|
229
235
|
}
|
|
230
236
|
})
|
|
231
237
|
|
|
238
|
+
export const revokeCertificateEndpointBodySchema = (env: SshCaBindings) => (
|
|
239
|
+
z.object({
|
|
240
|
+
serial: z.bigint()
|
|
241
|
+
.meta({ description: "Serial number of certificate to revoke" }),
|
|
242
|
+
public_key: publicKey,
|
|
243
|
+
proof: proofOfPossession
|
|
244
|
+
.transform((val, ctx) => transformProofOfPossession(env, val, ctx)),
|
|
245
|
+
})
|
|
246
|
+
.openapi("Certificate Revocation")
|
|
247
|
+
.superRefine((val, ctx) => refineRevokeCertificate(env, val, ctx))
|
|
248
|
+
)
|
|
249
|
+
|
|
232
250
|
export const createRevokeCertificateEndpointSchema = (env: SshCaBindings) => ({
|
|
233
251
|
request: {
|
|
234
252
|
params: z.object({
|
|
235
253
|
certificateType: z.enum(["user", "host"])
|
|
236
254
|
}),
|
|
237
|
-
body: contentJson(
|
|
238
|
-
z.object({
|
|
239
|
-
serial: z.bigint()
|
|
240
|
-
.meta({ description: "Serial number of certificate to revoke" }),
|
|
241
|
-
public_key: publicKey,
|
|
242
|
-
proof: proofOfPossession
|
|
243
|
-
.transform((val, ctx) => transformProofOfPossession(env, val, ctx)),
|
|
244
|
-
})
|
|
245
|
-
.openapi("Certificate Revocation")
|
|
246
|
-
.superRefine((val, ctx) => refineRevokeCertificate(env, val, ctx))
|
|
247
|
-
)
|
|
255
|
+
body: contentJson(revokeCertificateEndpointBodySchema(env))
|
|
248
256
|
},
|
|
249
257
|
responses: {
|
|
250
258
|
"200": {
|
package/src/certificate.ts
CHANGED
|
@@ -38,10 +38,16 @@ export type GenerateCertificateOptions = {
|
|
|
38
38
|
} & CreateCertificateOptions
|
|
39
39
|
|
|
40
40
|
export const generateCertificate = (env: SshCaBindings, email: string, key: PrivateKey, public_key: Key, options?: GenerateCertificateOptions): Certificate => {
|
|
41
|
-
let { lifetime
|
|
41
|
+
let { lifetime } = options ?? {}
|
|
42
|
+
const { principals, extensions, serial } = options ?? {}
|
|
42
43
|
|
|
43
44
|
// add identities
|
|
44
|
-
const
|
|
45
|
+
const includeSelf = env.SSH_CERTIFICATE_INCLUDE_SELF === undefined
|
|
46
|
+
? false
|
|
47
|
+
: typeof env.SSH_CERTIFICATE_INCLUDE_SELF === "string"
|
|
48
|
+
? env.SSH_CERTIFICATE_INCLUDE_SELF === "true"
|
|
49
|
+
: env.SSH_CERTIFICATE_INCLUDE_SELF
|
|
50
|
+
const identity = includeSelf
|
|
45
51
|
? [identityForUser(email.split("@")[0]!)]
|
|
46
52
|
: []
|
|
47
53
|
if (principals !== undefined) {
|
|
@@ -49,12 +55,12 @@ export const generateCertificate = (env: SshCaBindings, email: string, key: Priv
|
|
|
49
55
|
identity.push(identityForUser(p))
|
|
50
56
|
}
|
|
51
57
|
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
}
|
|
58
|
+
|
|
59
|
+
for (const p of split(env.SSH_CERTIFICATE_PRINCIPALS)) {
|
|
60
|
+
identity.push(identityForUser(p))
|
|
56
61
|
}
|
|
57
62
|
|
|
63
|
+
|
|
58
64
|
// lifetime is the smaller of what was provided in the options or the default
|
|
59
65
|
lifetime = lifetime !== undefined
|
|
60
66
|
? Math.min(lifetime, seconds(env.SSH_CERTIFICATE_LIFETIME))
|
package/src/db/index.ts
CHANGED
|
@@ -64,7 +64,7 @@ export const dbCleanup = async (env: SshCaBindings) => {
|
|
|
64
64
|
}).execute()
|
|
65
65
|
l.info("completed database cleanup", "changes", res.meta?.changes)
|
|
66
66
|
} catch (err) {
|
|
67
|
-
l.error("error during database cleanup", "retention", env.DB_CERTIFICATE_RETENTION)
|
|
67
|
+
l.error("error during database cleanup", "retention", env.DB_CERTIFICATE_RETENTION, "error", err)
|
|
68
68
|
}
|
|
69
69
|
}
|
|
70
70
|
|
|
@@ -74,7 +74,7 @@ export const recordCertificate = async (env: SshCaBindings, certificate: Certifi
|
|
|
74
74
|
return v.toString()
|
|
75
75
|
}).join(",")
|
|
76
76
|
const extensions = certificate.getExtensions().map((v: Format.OpenSshSignatureExt | Format.x509SignatureExt): string => {
|
|
77
|
-
// @ts-
|
|
77
|
+
// @ts-expect-error: the name property does exist
|
|
78
78
|
return v.name as string
|
|
79
79
|
}).join(",")
|
|
80
80
|
const qb = await connect(env)
|
package/src/krl.ts
CHANGED
|
@@ -215,7 +215,7 @@ function wrapEd25519Sig(sig: Uint8Array): Uint8Array {
|
|
|
215
215
|
* Base64-encode bytes and wrap in SSH signature armor at 76 chars per line.
|
|
216
216
|
*/
|
|
217
217
|
function armorSignature(bytes: Uint8Array): string {
|
|
218
|
-
|
|
218
|
+
const b64 = btoa(String.fromCharCode(...bytes))
|
|
219
219
|
const lines: string[] = []
|
|
220
220
|
for (let i = 0; i < b64.length; i += 76) {
|
|
221
221
|
lines.push(b64.slice(i, i + 76))
|
package/src/logger.ts
CHANGED
|
@@ -1,6 +1,16 @@
|
|
|
1
1
|
import type { SshCaBindings } from "./types"
|
|
2
2
|
import { Logger, LogLevel } from "@andrewheberle/ts-slog"
|
|
3
3
|
|
|
4
|
-
export const logger = (env: SshCaBindings) =>
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
export const logger = (env: SshCaBindings): Logger => {
|
|
5
|
+
const level = env.LOG_LEVEL === "none"
|
|
6
|
+
? LogLevel.None
|
|
7
|
+
: env.LOG_LEVEL === "error"
|
|
8
|
+
? LogLevel.Error
|
|
9
|
+
: env.LOG_LEVEL === "warning"
|
|
10
|
+
? LogLevel.Warning
|
|
11
|
+
: env.LOG_LEVEL == "debug"
|
|
12
|
+
? LogLevel.Debug
|
|
13
|
+
: LogLevel.Info
|
|
14
|
+
|
|
15
|
+
return new Logger({ minLevel: level })
|
|
16
|
+
}
|
package/src/router.ts
CHANGED
|
@@ -21,7 +21,14 @@ export const createApp = (env: SshCaBindings) => {
|
|
|
21
21
|
return c.json({ success: false, errors: [{ code: 7000, message: "Internal Server Error" }] }, 500)
|
|
22
22
|
})
|
|
23
23
|
|
|
24
|
-
const app = fromHono(hono
|
|
24
|
+
const app = fromHono(hono, {
|
|
25
|
+
schema: {
|
|
26
|
+
info: {
|
|
27
|
+
title: "Serverless SSH CA API",
|
|
28
|
+
version: "3.0.0"
|
|
29
|
+
},
|
|
30
|
+
}
|
|
31
|
+
})
|
|
25
32
|
|
|
26
33
|
app.registry.registerComponent("securitySchemes", "oidcAuth", {
|
|
27
34
|
type: 'http',
|
package/src/types.ts
CHANGED
|
@@ -32,18 +32,17 @@ export interface SshCaBindings {
|
|
|
32
32
|
PRIVATE_KEY: SecretsStoreSecret
|
|
33
33
|
SSH_CERTIFICATE_EXTENSIONS: string
|
|
34
34
|
SSH_CERTIFICATE_LIFETIME: string
|
|
35
|
-
SSH_CERTIFICATE_INCLUDE_SELF
|
|
36
|
-
SSH_CERTIFICATE_PRINCIPALS
|
|
35
|
+
SSH_CERTIFICATE_INCLUDE_SELF?: string | boolean
|
|
36
|
+
SSH_CERTIFICATE_PRINCIPALS?: string | string[]
|
|
37
37
|
SSH_HOST_CERTIFICATE_LIFETIME: string
|
|
38
|
-
SSH_HOST_CERTIFICATE_ALLOWED_EMAILS
|
|
39
|
-
SSH_HOST_CERTIFICATE_ALLOWED_ROLES
|
|
38
|
+
SSH_HOST_CERTIFICATE_ALLOWED_EMAILS?: string | string[]
|
|
39
|
+
SSH_HOST_CERTIFICATE_ALLOWED_ROLES?: string | string[]
|
|
40
40
|
ISSUER_DN: string
|
|
41
41
|
JWT_JWKS_URL: string
|
|
42
|
-
JWT_AUD
|
|
42
|
+
JWT_AUD?: string | string[]
|
|
43
43
|
JWT_ISSUER: string
|
|
44
|
-
JWT_ALGORITHMS: string
|
|
44
|
+
JWT_ALGORITHMS: string | string[]
|
|
45
45
|
JWT_SSH_CERTIFICATE_PRINCIPALS_CLAIM: string
|
|
46
|
-
SSH_HOST_CERTIFICATE_ALLOWED_ROLES_CLAIM: string
|
|
47
46
|
CERTIFICATE_REQUEST_TIME_SKEW_MAX: string
|
|
48
|
-
LOG_LEVEL
|
|
47
|
+
LOG_LEVEL?: string
|
|
49
48
|
}
|
package/src/utils.ts
CHANGED
|
@@ -135,10 +135,6 @@ export const identityPrincipals = (env: SshCaBindings, payload: CertificateReque
|
|
|
135
135
|
|
|
136
136
|
const l = logger(env)
|
|
137
137
|
|
|
138
|
-
if (claim === "__proto__" || claim === "prototype" || claim === "constructor") {
|
|
139
|
-
l.warn("invalid principals claim configured", "claim", claim)
|
|
140
|
-
return []
|
|
141
|
-
}
|
|
142
138
|
const p = payload[claim]
|
|
143
139
|
|
|
144
140
|
if (p === undefined) {
|
|
@@ -170,8 +166,8 @@ export const parseIdentity = async (env: SshCaBindings, jwt: string | undefined,
|
|
|
170
166
|
throw new Error("missing identity token")
|
|
171
167
|
}
|
|
172
168
|
|
|
173
|
-
const aud =
|
|
174
|
-
const { payload } = await verifyJWT(env, jwt, { aud: aud })
|
|
169
|
+
const aud = split(env.JWT_AUD)
|
|
170
|
+
const { payload } = await verifyJWT(env, jwt, { aud: aud.length === 0 ? undefined : aud })
|
|
175
171
|
|
|
176
172
|
const principals = identityPrincipals(env, payload, claim)
|
|
177
173
|
|
|
@@ -186,7 +182,7 @@ export const transformIdentityToken = async (env: SshCaBindings, val: string, ct
|
|
|
186
182
|
const identity = await parseIdentity(env, val, env.JWT_SSH_CERTIFICATE_PRINCIPALS_CLAIM)
|
|
187
183
|
|
|
188
184
|
return identity
|
|
189
|
-
} catch
|
|
185
|
+
} catch {
|
|
190
186
|
ctx.issues.push({
|
|
191
187
|
code: "custom",
|
|
192
188
|
message: "problem parsing identity token",
|
|
@@ -388,12 +384,14 @@ export const refineRevokeCertificate = async (env: SshCaBindings, val: ParsedRev
|
|
|
388
384
|
}
|
|
389
385
|
}
|
|
390
386
|
|
|
391
|
-
export const split = (v
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
387
|
+
export const split = (v?: string | string[]): string[] => {
|
|
388
|
+
return v === undefined
|
|
389
|
+
? []
|
|
390
|
+
: typeof v === "string"
|
|
391
|
+
? v === ""
|
|
392
|
+
? []
|
|
393
|
+
: v.split(",")
|
|
394
|
+
: v
|
|
397
395
|
}
|
|
398
396
|
|
|
399
397
|
export const getPublic = async (env: SshCaBindings, key?: PrivateKey): Promise<Key> => {
|