mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-07 08:27:36 +00:00
Merge pull request #4282 from JuliusMieliauskas/fix-san-extension-contents
FIX: x509 SAN Extension to accept IPs and URLs as args
This commit is contained in:
@@ -15,10 +15,15 @@ export const validateAltNameField = z
|
|||||||
.trim()
|
.trim()
|
||||||
.refine(
|
.refine(
|
||||||
(name) => {
|
(name) => {
|
||||||
return isFQDN(name, { allow_wildcard: true }) || z.string().email().safeParse(name).success || isValidIp(name);
|
return (
|
||||||
|
isFQDN(name, { allow_wildcard: true, require_tld: false }) ||
|
||||||
|
z.string().url().safeParse(name).success ||
|
||||||
|
z.string().email().safeParse(name).success ||
|
||||||
|
isValidIp(name)
|
||||||
|
);
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
message: "SAN must be a valid hostname, email address, or IP address"
|
message: "SAN must be a valid hostname, email address, IP address or URL"
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -39,10 +44,15 @@ export const validateAltNamesField = z
|
|||||||
if (data === "") return true;
|
if (data === "") return true;
|
||||||
// Split and validate each alt name
|
// Split and validate each alt name
|
||||||
return data.split(", ").every((name) => {
|
return data.split(", ").every((name) => {
|
||||||
return isFQDN(name, { allow_wildcard: true }) || z.string().email().safeParse(name).success || isValidIp(name);
|
return (
|
||||||
|
isFQDN(name, { allow_wildcard: true, require_tld: false }) ||
|
||||||
|
z.string().url().safeParse(name).success ||
|
||||||
|
z.string().email().safeParse(name).success ||
|
||||||
|
isValidIp(name)
|
||||||
|
);
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
message: "Each alt name must be a valid hostname or email address"
|
message: "Each alt name must be a valid hostname, email address, IP address or URL"
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|||||||
+20
-4
@@ -152,7 +152,7 @@ export const InternalCertificateAuthorityFns = ({
|
|||||||
extensions.push(extendedKeyUsagesExtension);
|
extensions.push(extendedKeyUsagesExtension);
|
||||||
}
|
}
|
||||||
|
|
||||||
let altNamesArray: { type: "email" | "dns"; value: string }[] = [];
|
let altNamesArray: { type: "email" | "dns" | "ip" | "url"; value: string }[] = [];
|
||||||
|
|
||||||
if (subscriber.subjectAlternativeNames?.length) {
|
if (subscriber.subjectAlternativeNames?.length) {
|
||||||
altNamesArray = subscriber.subjectAlternativeNames.map((altName) => {
|
altNamesArray = subscriber.subjectAlternativeNames.map((altName) => {
|
||||||
@@ -160,10 +160,18 @@ export const InternalCertificateAuthorityFns = ({
|
|||||||
return { type: "email", value: altName };
|
return { type: "email", value: altName };
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isFQDN(altName, { allow_wildcard: true })) {
|
if (isFQDN(altName, { allow_wildcard: true, require_tld: false })) {
|
||||||
return { type: "dns", value: altName };
|
return { type: "dns", value: altName };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (z.string().url().safeParse(altName).success) {
|
||||||
|
return { type: "url", value: altName };
|
||||||
|
}
|
||||||
|
|
||||||
|
if (z.string().ip().safeParse(altName).success) {
|
||||||
|
return { type: "ip", value: altName };
|
||||||
|
}
|
||||||
|
|
||||||
throw new BadRequestError({ message: `Invalid SAN entry: ${altName}` });
|
throw new BadRequestError({ message: `Invalid SAN entry: ${altName}` });
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -418,7 +426,7 @@ export const InternalCertificateAuthorityFns = ({
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
let altNamesArray: { type: "email" | "dns"; value: string }[] = [];
|
let altNamesArray: { type: "email" | "dns" | "ip" | "url"; value: string }[] = [];
|
||||||
|
|
||||||
if (altNames) {
|
if (altNames) {
|
||||||
altNamesArray = altNames.split(",").map((altName) => {
|
altNamesArray = altNames.split(",").map((altName) => {
|
||||||
@@ -426,10 +434,18 @@ export const InternalCertificateAuthorityFns = ({
|
|||||||
return { type: "email", value: altName };
|
return { type: "email", value: altName };
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isFQDN(altName, { allow_wildcard: true })) {
|
if (isFQDN(altName, { allow_wildcard: true, require_tld: false })) {
|
||||||
return { type: "dns", value: altName };
|
return { type: "dns", value: altName };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (z.string().url().safeParse(altName).success) {
|
||||||
|
return { type: "url", value: altName };
|
||||||
|
}
|
||||||
|
|
||||||
|
if (z.string().ip().safeParse(altName).success) {
|
||||||
|
return { type: "ip", value: altName };
|
||||||
|
}
|
||||||
|
|
||||||
throw new BadRequestError({ message: `Invalid SAN entry: ${altName}` });
|
throw new BadRequestError({ message: `Invalid SAN entry: ${altName}` });
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user