Package org.postgresql.ssl
Class BaseX509KeyManager
- java.lang.Object
-
- org.postgresql.ssl.BaseX509KeyManager
-
- All Implemented Interfaces:
javax.net.ssl.KeyManager,javax.net.ssl.X509KeyManager
- Direct Known Subclasses:
PEMKeyManager,PKCS12KeyManager
public abstract class BaseX509KeyManager extends java.lang.Object implements javax.net.ssl.X509KeyManager
-
-
Field Summary
Fields Modifier and Type Field Description protected PSQLExceptionerrorprivate static intROOT_UID
-
Constructor Summary
Constructors Constructor Description BaseX509KeyManager()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description java.lang.StringchooseClientAlias(java.lang.String[] keyType, java.security.Principal[] principals, java.net.Socket socket)java.lang.StringchooseServerAlias(java.lang.String s, java.security.Principal[] principals, java.net.Socket socket)java.lang.String[]getClientAliases(java.lang.String keyType, java.security.Principal[] principals)java.lang.String[]getServerAliases(java.lang.String s, java.security.Principal[] principals)private static booleanhasInsecurePosixPermissions(java.util.Set<java.nio.file.attribute.PosixFilePermission> permissions, boolean isOwnedByRoot)Determines whether the given POSIX permissions are insecure for a private key file.private static booleanisFileOwnedByRoot(java.nio.file.Path keyPath)Checks whether the file is owned by root (uid 0).voidthrowKeyManagerException()getCertificateChain and getPrivateKey cannot throw exceptions, therefore any exception is stored inerrorand can be raised by this method.static voidvalidateKeyFilePermissions(java.nio.file.Path keyPath)Validates that the private key file has secure permissions, matching libpq behavior.private static booleanvalidatePosixPermissions(java.nio.file.Path keyPath)Validates POSIX file permissions of key, matching libpq behavior.private static booleanvalidateWindowsAclPermissions(java.nio.file.Path keyPath)Validates Windows ACL permissions of the key file.
-
-
-
Field Detail
-
ROOT_UID
private static final int ROOT_UID
- See Also:
- Constant Field Values
-
error
protected PSQLException error
-
-
Method Detail
-
throwKeyManagerException
public void throwKeyManagerException() throws PSQLExceptiongetCertificateChain and getPrivateKey cannot throw exceptions, therefore any exception is stored inerrorand can be raised by this method.- Throws:
PSQLException- if any exception is stored inerrorand can be raised
-
getClientAliases
public java.lang.String[] getClientAliases(java.lang.String keyType, java.security.Principal[] principals)- Specified by:
getClientAliasesin interfacejavax.net.ssl.X509KeyManager
-
chooseClientAlias
public java.lang.String chooseClientAlias(java.lang.String[] keyType, java.security.Principal[] principals, java.net.Socket socket)- Specified by:
chooseClientAliasin interfacejavax.net.ssl.X509KeyManager
-
getServerAliases
public java.lang.String[] getServerAliases(java.lang.String s, java.security.Principal[] principals)- Specified by:
getServerAliasesin interfacejavax.net.ssl.X509KeyManager
-
chooseServerAlias
public java.lang.String chooseServerAlias(java.lang.String s, java.security.Principal[] principals, java.net.Socket socket)- Specified by:
chooseServerAliasin interfacejavax.net.ssl.X509KeyManager
-
validateKeyFilePermissions
public static void validateKeyFilePermissions(java.nio.file.Path keyPath) throws PSQLExceptionValidates that the private key file has secure permissions, matching libpq behavior. On POSIX systems, root-owned files are allowed group-read access (up to 0640), since it's common for root to own certs and grant read access via group membership. Files owned by anyone else must be 0600 or stricter. On Windows, ACLs are checked to ensure only the owner and trusted system accounts have access.- Parameters:
keyPath- the path to the private key file- Throws:
PSQLException- if the file has insecure permissions
-
validatePosixPermissions
private static boolean validatePosixPermissions(java.nio.file.Path keyPath) throws PSQLExceptionValidates POSIX file permissions of key, matching libpq behavior. Root-owned files (uid 0) allow GROUP_READ (up to 0640). Non-root-owned files require 0600 or less (no group or other permissions).- Parameters:
keyPath- the path to the private key file- Returns:
- true if validation succeeded (permissions are secure), false if POSIX is not supported
- Throws:
PSQLException- if the file has insecure permissions
-
isFileOwnedByRoot
private static boolean isFileOwnedByRoot(java.nio.file.Path keyPath) throws java.io.IOExceptionChecks whether the file is owned by root (uid 0). Falls back to false if the unix:uid attribute is not available.- Throws:
java.io.IOException
-
hasInsecurePosixPermissions
private static boolean hasInsecurePosixPermissions(java.util.Set<java.nio.file.attribute.PosixFilePermission> permissions, boolean isOwnedByRoot)Determines whether the given POSIX permissions are insecure for a private key file. Matches libpq behavior: root-owned files allow GROUP_READ (0640), while non-root-owned files reject all group and other permissions (0600).
-
validateWindowsAclPermissions
private static boolean validateWindowsAclPermissions(java.nio.file.Path keyPath) throws PSQLExceptionValidates Windows ACL permissions of the key file.- Parameters:
keyPath- the path to the private key file- Returns:
- true if validation succeeded (permissions are secure), false if ACL is not supported
- Throws:
PSQLException- if the file has insecure permissions
-
-