Skip to content

Commit 552de1b

Browse files
authored
[Backport 2.x] Fix permissions issues while reading keys in PKCS#1 format (#3322)
Backport #3289 to 2.x Signed-off-by: Craig Perkins <cwperx@amazon.com>
1 parent 3d191b8 commit 552de1b

2 files changed

Lines changed: 60 additions & 25 deletions

File tree

plugin-security.policy

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ grant {
3737
permission java.util.PropertyPermission "*","read,write";
3838

3939
//Enable when we switch to UnboundID LDAP SDK
40-
//permission java.util.PropertyPermission "*", "read,write";
4140
//permission java.lang.RuntimePermission "setFactory";
4241
//permission javax.net.ssl.SSLPermission "setHostnameVerifier";
4342

@@ -61,11 +60,12 @@ grant {
6160
permission java.security.SecurityPermission "insertProvider.BC";
6261
permission java.security.SecurityPermission "removeProviderProperty.BC";
6362
permission java.util.PropertyPermission "jdk.tls.rejectClientInitiatedRenegotiation", "write";
63+
permission java.security.SecurityPermission "getProperty.org.bouncycastle.rsa.max_size";
64+
permission java.security.SecurityPermission "getProperty.org.bouncycastle.rsa.max_mr_tests";
6465

6566
permission java.lang.RuntimePermission "accessUserInformation";
6667

6768
permission java.security.SecurityPermission "org.apache.xml.security.register";
68-
permission java.util.PropertyPermission "org.apache.xml.security.ignoreLineBreaks", "write";
6969

7070
permission java.lang.RuntimePermission "createClassLoader";
7171

src/main/java/org/opensearch/security/ssl/DefaultSecurityKeyStore.java

Lines changed: 58 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -958,19 +958,32 @@ private SslContext buildSSLServerContext(
958958
final ClientAuth authMode
959959
) throws SSLException {
960960

961-
final SslContextBuilder _sslContextBuilder = SslContextBuilder.forServer(_key, _cert)
962-
.ciphers(ciphers)
963-
.applicationProtocolConfig(ApplicationProtocolConfig.DISABLED)
964-
.clientAuth(Objects.requireNonNull(authMode)) // https://github.com/netty/netty/issues/4722
965-
.sessionCacheSize(0)
966-
.sessionTimeout(0)
967-
.sslProvider(sslProvider);
961+
try {
962+
final SslContextBuilder _sslContextBuilder = AccessController.doPrivileged(new PrivilegedExceptionAction<SslContextBuilder>() {
963+
@Override
964+
public SslContextBuilder run() throws Exception {
965+
return SslContextBuilder.forServer(_key, _cert)
966+
.ciphers(ciphers)
967+
.applicationProtocolConfig(ApplicationProtocolConfig.DISABLED)
968+
.clientAuth(Objects.requireNonNull(authMode)) // https://github.com/netty/netty/issues/4722
969+
.sessionCacheSize(0)
970+
.sessionTimeout(0)
971+
.sslProvider(sslProvider);
972+
}
973+
});
968974

969-
if (_trustedCerts != null && _trustedCerts.length > 0) {
970-
_sslContextBuilder.trustManager(_trustedCerts);
971-
}
975+
if (_trustedCerts != null && _trustedCerts.length > 0) {
976+
_sslContextBuilder.trustManager(_trustedCerts);
977+
}
972978

973-
return buildSSLContext0(_sslContextBuilder);
979+
return buildSSLContext0(_sslContextBuilder);
980+
} catch (final PrivilegedActionException e) {
981+
if (e.getCause() instanceof SSLException) {
982+
throw (SSLException) e.getCause();
983+
} else {
984+
throw new RuntimeException(e);
985+
}
986+
}
974987
}
975988

976989
private SslContext buildSSLServerContext(
@@ -982,20 +995,38 @@ private SslContext buildSSLServerContext(
982995
final SslProvider sslProvider,
983996
final ClientAuth authMode
984997
) throws SSLException {
998+
final SecurityManager sm = System.getSecurityManager();
985999

986-
final SslContextBuilder _sslContextBuilder = SslContextBuilder.forServer(_cert, _key, pwd)
987-
.ciphers(ciphers)
988-
.applicationProtocolConfig(ApplicationProtocolConfig.DISABLED)
989-
.clientAuth(Objects.requireNonNull(authMode)) // https://github.com/netty/netty/issues/4722
990-
.sessionCacheSize(0)
991-
.sessionTimeout(0)
992-
.sslProvider(sslProvider);
993-
994-
if (_trustedCerts != null) {
995-
_sslContextBuilder.trustManager(_trustedCerts);
1000+
if (sm != null) {
1001+
sm.checkPermission(new SpecialPermission());
9961002
}
9971003

998-
return buildSSLContext0(_sslContextBuilder);
1004+
try {
1005+
final SslContextBuilder _sslContextBuilder = AccessController.doPrivileged(new PrivilegedExceptionAction<SslContextBuilder>() {
1006+
@Override
1007+
public SslContextBuilder run() throws Exception {
1008+
return SslContextBuilder.forServer(_cert, _key, pwd)
1009+
.ciphers(ciphers)
1010+
.applicationProtocolConfig(ApplicationProtocolConfig.DISABLED)
1011+
.clientAuth(Objects.requireNonNull(authMode)) // https://github.com/netty/netty/issues/4722
1012+
.sessionCacheSize(0)
1013+
.sessionTimeout(0)
1014+
.sslProvider(sslProvider);
1015+
}
1016+
});
1017+
1018+
if (_trustedCerts != null) {
1019+
_sslContextBuilder.trustManager(_trustedCerts);
1020+
}
1021+
1022+
return buildSSLContext0(_sslContextBuilder);
1023+
} catch (final PrivilegedActionException e) {
1024+
if (e.getCause() instanceof SSLException) {
1025+
throw (SSLException) e.getCause();
1026+
} else {
1027+
throw new RuntimeException(e);
1028+
}
1029+
}
9991030
}
10001031

10011032
private SslContext buildSSLClientContext(
@@ -1059,7 +1090,11 @@ public SslContext run() throws Exception {
10591090
}
10601091
});
10611092
} catch (final PrivilegedActionException e) {
1062-
throw (SSLException) e.getCause();
1093+
if (e.getCause() instanceof SSLException) {
1094+
throw (SSLException) e.getCause();
1095+
} else {
1096+
throw new RuntimeException(e);
1097+
}
10631098
}
10641099

10651100
return sslContext;

0 commit comments

Comments
 (0)