From b6e4a9633c39d611e6037125ee76991312c95ad5 Mon Sep 17 00:00:00 2001 From: Hasnain Lakhani Date: Thu, 24 Aug 2023 16:18:39 -0700 Subject: [PATCH 1/3] working --- common/network-common/pom.xml | 34 +- .../spark/network/TransportContext.java | 76 ++- .../buffer/FileSegmentManagedBuffer.java | 7 + .../spark/network/buffer/ManagedBuffer.java | 11 + .../network/buffer/NettyManagedBuffer.java | 5 + .../network/buffer/NioManagedBuffer.java | 5 + .../spark/network/client/TransportClient.java | 5 +- .../client/TransportClientFactory.java | 26 +- .../protocol/EncryptedMessageWithHeader.java | 131 +++++ .../network/protocol/SslMessageEncoder.java | 108 ++++ .../server/TransportChannelHandler.java | 4 + .../spark/network/server/TransportServer.java | 2 +- .../ssl/ReloadingX509TrustManager.java | 201 +++++++ .../apache/spark/network/ssl/SSLFactory.java | 503 ++++++++++++++++++ .../spark/network/util/NettyLogger.java | 11 + .../spark/network/util/TransportConf.java | 163 ++++++ .../src/test/java/TransportConfSuite.java | 91 ++++ .../SslChunkFetchIntegrationSuite.java | 104 ++++ .../spark/network/TestManagedBuffer.java | 5 + .../SslTransportClientFactorySuite.java | 39 ++ .../client/TransportClientFactorySuite.java | 8 +- .../EncryptedMessageWithHeaderSuite.java | 144 +++++ .../ssl/ReloadingX509TrustManagerSuite.java | 197 +++++++ .../spark/network/ssl/SslSampleConfigs.java | 235 ++++++++ .../src/test/resources/certchain.pem | 17 + .../network-common/src/test/resources/key.pem | 29 + .../src/test/resources/keystore | Bin 0 -> 2247 bytes .../src/test/resources/truststore | Bin 0 -> 957 bytes .../src/test/resources/untrusted-keystore | Bin 0 -> 2246 bytes .../shuffle/ShuffleTransportContext.java | 12 +- .../ExternalShuffleIntegrationSuite.java | 28 +- .../shuffle/ExternalShuffleSecuritySuite.java | 14 +- .../shuffle/ShuffleTransportContextSuite.java | 43 +- .../SslExternalShuffleIntegrationSuite.java | 95 ++++ .../SslExternalShuffleSecuritySuite.java | 45 ++ .../SslShuffleTransportContextSuite.java | 38 ++ .../src/test/resources/certchain.pem | 17 + .../src/test/resources/key.pem | 29 + .../src/test/resources/keystore | Bin 0 -> 2247 bytes .../src/test/resources/truststore | Bin 0 -> 957 bytes .../src/test/resources/untrusted-keystore | Bin 0 -> 2246 bytes core/pom.xml | 7 + .../scala/org/apache/spark/SSLOptions.scala | 132 ++++- .../org/apache/spark/SecurityManager.scala | 67 ++- .../scala/org/apache/spark/SparkConf.scala | 4 +- .../scala/org/apache/spark/SparkEnv.scala | 7 +- .../spark/deploy/ExternalShuffleService.scala | 6 +- .../spark/deploy/worker/CommandUtils.scala | 13 +- .../CoarseGrainedExecutorBackend.scala | 4 +- .../netty/NettyBlockTransferService.scala | 6 +- .../network/netty/SparkTransportConf.scala | 32 +- .../apache/spark/rpc/netty/NettyRpcEnv.scala | 12 +- .../shuffle/IndexShuffleBlockResolver.scala | 8 +- .../spark/shuffle/ShuffleBlockPusher.scala | 6 +- .../apache/spark/storage/BlockManager.scala | 12 +- .../storage/BlockManagerManagedBuffer.scala | 2 + .../org/apache/spark/storage/DiskStore.scala | 13 + .../spark/util/io/ChunkedByteBuffer.scala | 20 + core/src/test/resources/certchain.pem | 17 + core/src/test/resources/key.pem | 29 + .../spark/ExternalShuffleServiceSuite.scala | 8 +- .../org/apache/spark/SSLOptionsSuite.scala | 127 +++++ .../org/apache/spark/SparkConfSuite.scala | 6 +- .../SslExternalShuffleServiceSuite.scala | 55 ++ .../apache/spark/SslShuffleNettySuite.scala | 28 + .../deploy/worker/CommandUtilsSuite.scala | 29 +- .../CoarseGrainedExecutorBackendSuite.scala | 44 +- .../network/BlockTransferServiceSuite.scala | 2 + .../NettyBlockTransferSecuritySuite.scala | 83 +++ .../org/apache/spark/rpc/RpcEnvSuite.scala | 52 +- .../spark/rpc/netty/NettyRpcEnvSuite.scala | 16 +- .../BlockStoreShuffleReaderSuite.scala | 1 + .../shuffle/ShuffleBlockPusherSuite.scala | 16 +- .../sort/IndexShuffleBlockResolverSuite.scala | 16 +- .../BlockManagerReplicationSuite.scala | 40 +- .../SslBlockManagerReplicationSuite.scala | 49 ++ dev/deps/spark-deps-hadoop-3-hive-2.3 | 6 + docs/security.md | 91 +++- pom.xml | 25 + resource-managers/mesos/pom.xml | 7 + .../MesosCoarseGrainedSchedulerBackend.scala | 3 +- .../mesos/src/test/resources/certchain.pem | 17 + .../mesos/src/test/resources/key.pem | 29 + .../mesos/src/test/resources/keystore | Bin 0 -> 2247 bytes .../mesos/src/test/resources/truststore | Bin 0 -> 957 bytes .../src/test/resources/untrusted-keystore | Bin 0 -> 2246 bytes ...osCoarseGrainedSchedulerBackendSuite.scala | 15 +- resource-managers/yarn/pom.xml | 7 + .../yarn/src/test/resources/certchain.pem | 17 + .../yarn/src/test/resources/key.pem | 29 + .../yarn/src/test/resources/keystore | Bin 0 -> 2247 bytes .../yarn/src/test/resources/truststore | Bin 0 -> 957 bytes .../src/test/resources/untrusted-keystore | Bin 0 -> 2246 bytes .../yarn/SslYarnShuffleServiceSuite.scala | 33 ++ 94 files changed, 3577 insertions(+), 153 deletions(-) create mode 100644 common/network-common/src/main/java/org/apache/spark/network/protocol/EncryptedMessageWithHeader.java create mode 100644 common/network-common/src/main/java/org/apache/spark/network/protocol/SslMessageEncoder.java create mode 100644 common/network-common/src/main/java/org/apache/spark/network/ssl/ReloadingX509TrustManager.java create mode 100644 common/network-common/src/main/java/org/apache/spark/network/ssl/SSLFactory.java create mode 100644 common/network-common/src/test/java/TransportConfSuite.java create mode 100644 common/network-common/src/test/java/org/apache/spark/network/SslChunkFetchIntegrationSuite.java create mode 100644 common/network-common/src/test/java/org/apache/spark/network/client/SslTransportClientFactorySuite.java create mode 100644 common/network-common/src/test/java/org/apache/spark/network/protocol/EncryptedMessageWithHeaderSuite.java create mode 100644 common/network-common/src/test/java/org/apache/spark/network/ssl/ReloadingX509TrustManagerSuite.java create mode 100644 common/network-common/src/test/java/org/apache/spark/network/ssl/SslSampleConfigs.java create mode 100644 common/network-common/src/test/resources/certchain.pem create mode 100644 common/network-common/src/test/resources/key.pem create mode 100644 common/network-common/src/test/resources/keystore create mode 100644 common/network-common/src/test/resources/truststore create mode 100644 common/network-common/src/test/resources/untrusted-keystore create mode 100644 common/network-shuffle/src/test/java/org/apache/spark/network/shuffle/SslExternalShuffleIntegrationSuite.java create mode 100644 common/network-shuffle/src/test/java/org/apache/spark/network/shuffle/SslExternalShuffleSecuritySuite.java create mode 100644 common/network-shuffle/src/test/java/org/apache/spark/network/shuffle/SslShuffleTransportContextSuite.java create mode 100644 common/network-shuffle/src/test/resources/certchain.pem create mode 100644 common/network-shuffle/src/test/resources/key.pem create mode 100644 common/network-shuffle/src/test/resources/keystore create mode 100644 common/network-shuffle/src/test/resources/truststore create mode 100644 common/network-shuffle/src/test/resources/untrusted-keystore create mode 100644 core/src/test/resources/certchain.pem create mode 100644 core/src/test/resources/key.pem create mode 100644 core/src/test/scala/org/apache/spark/SslExternalShuffleServiceSuite.scala create mode 100644 core/src/test/scala/org/apache/spark/SslShuffleNettySuite.scala create mode 100644 core/src/test/scala/org/apache/spark/storage/SslBlockManagerReplicationSuite.scala create mode 100644 resource-managers/mesos/src/test/resources/certchain.pem create mode 100644 resource-managers/mesos/src/test/resources/key.pem create mode 100644 resource-managers/mesos/src/test/resources/keystore create mode 100644 resource-managers/mesos/src/test/resources/truststore create mode 100644 resource-managers/mesos/src/test/resources/untrusted-keystore create mode 100644 resource-managers/yarn/src/test/resources/certchain.pem create mode 100644 resource-managers/yarn/src/test/resources/key.pem create mode 100644 resource-managers/yarn/src/test/resources/keystore create mode 100644 resource-managers/yarn/src/test/resources/truststore create mode 100644 resource-managers/yarn/src/test/resources/untrusted-keystore create mode 100644 resource-managers/yarn/src/test/scala/org/apache/spark/network/yarn/SslYarnShuffleServiceSuite.scala diff --git a/common/network-common/pom.xml b/common/network-common/pom.xml index 1823edbe0f53d..867cae5af9886 100644 --- a/common/network-common/pom.xml +++ b/common/network-common/pom.xml @@ -67,6 +67,26 @@ netty-transport-native-kqueue osx-x86_64 + + io.netty + netty-tcnative-boringssl-static + linux-x86_64 + + + io.netty + netty-tcnative-boringssl-static + linux-aarch_64 + + + io.netty + netty-tcnative-boringssl-static + osx-aarch_64 + + + io.netty + netty-tcnative-boringssl-static + osx-x86_64 + @@ -147,12 +167,24 @@ log4j-slf4j2-impl test + + org.bouncycastle + bcprov-jdk15on + ${bouncycastle.version} + test + + + org.bouncycastle + bcpkix-jdk15on + ${bouncycastle.version} + test + org.apache.spark spark-common-utils_${scala.binary.version} ${project.version} - + diff --git a/resource-managers/mesos/pom.xml b/resource-managers/mesos/pom.xml index 29c341f8c3525..e7a7342bf3026 100644 --- a/resource-managers/mesos/pom.xml +++ b/resource-managers/mesos/pom.xml @@ -54,6 +54,13 @@ test-jar test + + org.apache.spark + spark-network-common_${scala.binary.version} + ${project.version} + test-jar + test + org.apache.mesos diff --git a/resource-managers/mesos/src/main/scala/org/apache/spark/scheduler/cluster/mesos/MesosCoarseGrainedSchedulerBackend.scala b/resource-managers/mesos/src/main/scala/org/apache/spark/scheduler/cluster/mesos/MesosCoarseGrainedSchedulerBackend.scala index e5a6a5f1ef166..063bd6c1770e7 100644 --- a/resource-managers/mesos/src/main/scala/org/apache/spark/scheduler/cluster/mesos/MesosCoarseGrainedSchedulerBackend.scala +++ b/resource-managers/mesos/src/main/scala/org/apache/spark/scheduler/cluster/mesos/MesosCoarseGrainedSchedulerBackend.scala @@ -172,7 +172,8 @@ private[spark] class MesosCoarseGrainedSchedulerBackend( // This method is factored out for testability protected def getShuffleClient(): MesosExternalBlockStoreClient = { new MesosExternalBlockStoreClient( - SparkTransportConf.fromSparkConf(conf, "shuffle"), + SparkTransportConf.fromSparkConfWithSslOptions( + conf, "shuffle", sslOptions = Some(securityManager.getSSLOptions("rpc"))), securityManager, securityManager.isAuthenticationEnabled(), conf.get(config.SHUFFLE_REGISTRATION_TIMEOUT)) diff --git a/resource-managers/mesos/src/test/resources/certchain.pem b/resource-managers/mesos/src/test/resources/certchain.pem new file mode 100644 index 0000000000000..1004cacc9bf9a --- /dev/null +++ b/resource-managers/mesos/src/test/resources/certchain.pem @@ -0,0 +1,17 @@ +-----BEGIN CERTIFICATE----- +MIICsDCCAZgCCQD7yXTHZWZZlDANBgkqhkiG9w0BAQsFADAaMQswCQYDVQQGEwJV +UzELMAkGA1UECAwCQ0EwHhcNMjMwNjIwMTczMjAzWhcNMzMwNjE3MTczMjAzWjAa +MQswCQYDVQQGEwJVUzELMAkGA1UECAwCQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IB +DwAwggEKAoIBAQDH4DO8IP/7xZgpzmYrBaqzsnpamq54cXP8JdQUOXP/dmh8myGg +CUau/nNdpPNr1Od2iUvf1Z9OW+KcHdNAL/zcwe1ehU3d6/M+UinDtfbEb4HSyQ31 +9AIlPSUq+pJAlsAGJYERLGHPBNXEay0r0+TR0cd9CfSN79rXUMag40pZC3zdxXmY +JpSkhNuiYfa+Z9TgXoki5MzNiyH12gAb9tO8tr55BnE5s/QujOp7LMjlf6VkE7Bp +hqj1UbcHmFw7U9jyLDfi98uIvlEDFCwXARdmLxxaYAOqdgZ3TtjBvbugVRpRFQiw +haFzkiok9bh+MclKQBKvF0ArHmMLHkcCd5oPAgMBAAEwDQYJKoZIhvcNAQELBQAD +ggEBADYIPLwlnuH6rTbkjeZFYC2UXjNesbUe1TXbsBo9DDHJUSFjNNDDAUpSzhxb +q6nMvex7tnTvTjAgOQR/qwAueAfcXHWe0EKvn4Y6yJERepSsYg5bSYBt+UJxW89R +JRLmzBFxEJy1YhsqGCh+I2wRoRz8ZGokDyqcrAlwlzXYVDfNC4wUo14Cm+s90yc3 +2I/roX/MWec8QbEbr25psAYVnRdUL1mzCeQMc83A8Y0SDPfF5ECFhvFXkVaDTULO +RddXWJoC4K5RuGa6yvpb75I8VTE3fwE2ykSgPuMShNZREDCuszkpPjjFumq9pCOJ +nUO1huCqjxC1ehPe/9/jgmzoVX4= +-----END CERTIFICATE----- diff --git a/resource-managers/mesos/src/test/resources/key.pem b/resource-managers/mesos/src/test/resources/key.pem new file mode 100644 index 0000000000000..77122755bfdaf --- /dev/null +++ b/resource-managers/mesos/src/test/resources/key.pem @@ -0,0 +1,29 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIIE6TAbBgkqhkiG9w0BBQMwDgQIGBIe7ugOgfACAggABIIEyJgkzYc/ixcvwLJC +eTzGOVwk+F1cqM4H63FOxIjroaxisceqoBmty6Rf4PJ1C9nprkSs6G/SkupbNUUB +YiWmsQ91orllbHsczAc+qaa0tmommwgt27ZrfXdXBxDB0mJWQTijkVHWfyTqcXmC +oeWlvTFsilA4CoVakryZQScl3qH/aN5zazg9gjx2xNCRwFexeccC7TqICJkPtnJC ++6wrSby2A9HlJs/MdtYyhfN360GDKvQygnw+wQj+san8EV5s7I7b45SsdEx5vOxP ++AKc6h7loWJkLrJFqDGtfqY/TY76t+sQpinS7R3sA4uYaT1bIx8Feu0GcIbnr3NS +54St9hNfOgEDmWKFj0ZmMTEISOujj8hNTKYdc0Z/dx/+izqNCuLEXiJjLDIPxfRJ +EfeYG0/4fBxdeZgIwIVVsUXX4eSzXhguuiwulNhRkUzKhH9aNrp1fw5t0hgsJOPx +O8Y2sAtDL6KUHx+rt0ejrHYXK1+BOUCHcZiHCGmLCCQlrcX5TWDYPkhtrbtbxS6m +p9aVxq7pcyxelVlUBXtWeYvcOHGueEd7QQL16uYbhrTHFIwx2Pw//LNIgyJTBNu7 +hxm2jica15PaALtSsYDRhsE9VkWawW9AXeBWOnEj7YKrT5ejrQLI9eCxtolRbVNd +gSR5r7MQkPssjCU+pdsCl98e0mxVnq8eMDtZYSIDGLEyPfJNCsxDanzUuxSfBP8K +cIDzREINA/QiuhyGxxBB8dR6k+kl1LNVy8FA7RYAe84MLW2wuaFMQirMDtTLo/Wt +/AatxW4WKlCvfd/nC8O5xlzmF5qffhgmS8xYDL/w1G3Uxo21dA4gGipH9uw91wqi +YaSidtcVs6JbHpUddmO5AiEiSBbbwqNgaOxNdur1WYWZHDNWvCKL9sqQy/HtDLHy +Tzyuw8GtrpB2BKfWWwbAApqvjcqgjitEXk2Nw/L3qWfWmVStP9ys5rz27UWRhMFi +Go/HrVh7heOxK16ei5tp2OyRLSfDBZ7+IlpbbnR26BPdBE08cuBo/ELOfifnYTTS +V4CKLMiG7RxtdAddkFKO+GgNW1nNHppBBhJzDvuBcFuUfB+AdnymZTlA8RFha7aW +zwtg6I1ABdMGPn+wzMhkkutDtSCWpkBRddJPcB1mwmRdp/2WC3NxuaMQX3anQG36 +9m2sxWUmT8ZLGvFDHIwGbRPT5zzcvIJV/xhZdCxhg/7tgLikBZBB8TmtDBck+wq+ +DPIEQkr4rObCi9xphSpHvPBGhdI5v8xbKEGLcPzVMW0hjaHouvQipEXC+ASrn/sG +nytZkyt1DD8KG27wlcrDl/RDCcjNvlKkgKPme3pPsDcD+qX+eqjQ4OM9AexW+VLZ +ZUa84/Fh6yjbuPF3vtCVRwFJURzhKMVG3Fcs7C3iczCOUNDOar9k0yCrmbACF9Wm +kSD5lXPXe1fFq0xi21Isuz+FH4A5CR/tHc2i+avQhYs9FvaqzLiaNmLaZKrhX5uy +dJXYtLruhgwBjv4eo6GXm8/WHFG6r4iaq6NEimQoT41MH+uJr9nAiBWg397JoHpG +jheCZDpZBAVuEz8NUdWP7mu64DQsjKeY6okwMlXlcSUKlMnx8QCtEMTj/JF7E7dT +bHYe30+OIWl3X88v9Q== +-----END ENCRYPTED PRIVATE KEY----- diff --git a/resource-managers/mesos/src/test/resources/keystore b/resource-managers/mesos/src/test/resources/keystore new file mode 100644 index 0000000000000000000000000000000000000000..f8310e39ba1e07c7559e5724f522c06ca47f5787 GIT binary patch literal 2247 zcmchYc{J1uAI9f5Gt8i|P1&wBlPn{@Y0#AI+9uMFEKS|9bCtJ0{)TM zX}X`!>67%Z@GWAuh_Ft8Kt!M*6TS&bii+!r0&qYVDgyu_5I7UgZ~dLDFFKbbe4NJ> z8h*OOS9N;OWepcs>OGoE=zuk2V{*wI)Z_e}>Z@^h>_v>&7v=eK%-(UR|F2)6ifSZm zB{$HW8@=O<)XbNH;_wk=FeM$Bjfx=?s>^D9Zr#6WTzln-!DYFW$=EZVD(3K>jS96w z-f`E>K|`eE2uJ#EUlg%5TBw+iWJz5iySD{o5{Ul(C)@&^f0t&B->D-6`JH0%@@;s@ zjMngAG004|Ao+Z!S-#o>U%j;FhYZ-6+Sr%89Pdns-=>tDGRpP7IeZ?->$L-DANQrdWKTa;0 zluk^040v;S@5DL7!>L;M8&vwCZAjLK*vpGqYx~-VYZs+3mb>>RYt{axVJiP>$3Y|} zz*eB_iPWr6Tc->>lU_2dn3A0UZrr!p`Ly9<%d%n&X#yvmACj3LY^dq?e=FaqJ!`fkB(%M!T4bA&bADq%;%h1-L)a{YF#I>*n5; zXt7P-gtHyc-1yawv9;te^CLkar+P2}c`q>)=Cwt62se##oHtS0qXNZJW*YMjnTYe| z1W+lZjRJNxO-J~$3RTEpZS0TIp!w}_nOBXJ>YGGE1!=AA8t_d9vGYswy&Plo@H7BgF?Rr;IN}~I_OZ5AE?Xc>e zduB^$Zl^0#&4F^xR^%KivoAj*R)05F<5T{9#!cLae!D`i$@(i5VdKPs;vD6ow-Pa0 zmfi>Du&L;*jI`*2mxHbvy2C)a@EF^M?KmG1vd1J;hO<00q{Ea0+F@!vpWZUoIem_pk7QGFApU$XWEZyP!S$ zy2#@wW_snjaE*mkb%s`~Ur~W0n&f9pXRDv9^a`mg8=d@ECh_CSHJ#du`ah#SxB9W1 z-pb!}YxjkPKt*mOLDS3IRD~MerwrgiggePgez$MStIAG30Vaz+z znP5Kohc09y*(6S=bZ0;6*@CtY{i164xeX%S_5pQfMC@N!nO0wH%Xtuc`Uu_?pnpJ3cKSbR^Nesz@fkeg8K_ zTJ35i8GW{Bgm&Uy_A)8Ar>TC80v~KUm51AD4|t?pz-*InPU(xFwfe7aK@- z&`sYxAFsV#57|9oUhntf^%Ms6?u7Ik>%Ezi3GO{ccd$K+?Z=*8-c9HP#s zOrXfNhRKwkI)1xzMcTvsXTrA@mGdnR9#$e8BDNj1us(Rjp^I@0JHr=J9h*keYb@4` zEbRm4_$*5QRieRoP)JDy&5{>VVsBkDRg>0s_n`ei%|c)v!>9n^H~H}eLNotr3B^*= z{jjq6yqK``^Vn@D41fS-8lW1evegh3Nw^$*J9JmC0%UznnvdunEUWXJm7jB#`FDt0 zo!SZ!fDlyn__i1(A!8e5JfGHGYq#O59PYAPUd^G9FA4GLhdQU@y3_KivZwp9e#sjZ z1)6E~Py4647bJ-*g&tbSSqXlAo`|VY0-a#1EcqqpmY_MpMl0!c@gNTqd?DPoAC6{F zX#Czw>93?(`H$;NoCL46jICSrt~xR}wNV^~dn<|;)#U(7hP$oGOzs-~AvLGK&g0zM zw^?bP=4NGFJ3;N}QsShyk0XSs?LW@9d~Sxj?AVZ{pOtdaJ7!gP>dq$(AFE$ic(QF_ zMtzQi_+9hZzoOnZ-qFt&6a;ssvcmgs))|WiZVphZ+9n#oo9dzuTg|>3rcC)~XD4Ad ZwPrecI^>>DS9jrYAM6Ze@sCox{su3o&c*-$ literal 0 HcmV?d00001 diff --git a/resource-managers/mesos/src/test/resources/truststore b/resource-managers/mesos/src/test/resources/truststore new file mode 100644 index 0000000000000000000000000000000000000000..a6b1d46e1f391995553771665934518114892962 GIT binary patch literal 957 zcmezO_TO6u1_mY|W(3omIr+(nIT`uIB|s66PaJ187+53pObsj<7?`UKnwZNCnwa7j zFf%bSF|h<%`7Sl!W#iOp^Jx3d%gD&h%3zRVC}6bQhKm@;iSrto7#bK@7#SNH7@I@^xuyn&24+w$on6z!sDvCGjI0dIO^o~u z22G4yOihf849&hp=Zrag|9n~Gc#H3$vhv=@pKm=9>UvU(ZZwCjnIky!nB{NDyiMQB zBZO<_+{laCF!_t`)YJQR{_Ib&x!G3fds+PIs-~1XLS?NdeqFL|Ki_tDnb_pb)#>@( zTD|J;>oi2PIZoZR+nId!%3~GY`%wb7osA|uXbd}Tx=!cX%NWDQox39rO%?vMzHf?~ z=1swLR-RoC+D>nNbu4gY&$gL|-rloc_5R@2ZL8S5%Xot9o!zH-pDYd6dHL#Xw%@*+ zy&LU+nmT%>zI)Xlb76*?{++DCc`NfA&lk?~bl&)QW6#lb?w*%6eoUWUYC4NO`N6ZZ z?8-A|%!_eU4)c+*d(ZiH(T7{hnV1hF?DgUa_CL zx_EQkYw>r1g2;ggOjE!>WMr_A)k`{P(!x=_M=);x=K055cF6ji^!W09N=!ueTVn;U z6EA8{^-Nzg`Ng@3($jCUF&@ae8^o zyyq)UdNa4Ognk!%pnCm3|2v5#(^qdW|F_DnC)CMo)7|XjC#6>R9=pT-w&U3U_Jbb| zump?#5z4RO57rKM+MK!exniP|!?*K7M~h9*`B~JdzSntD@o>*t-I;G@<(}y1FS)RE zvl(0Zzf0L`j^5p4uvCF<+hNhw literal 0 HcmV?d00001 diff --git a/resource-managers/mesos/src/test/resources/untrusted-keystore b/resource-managers/mesos/src/test/resources/untrusted-keystore new file mode 100644 index 0000000000000000000000000000000000000000..6015b02caa12817721fca3a83c8e58338b6d9aeb GIT binary patch literal 2246 zcmchYS5VUl7sc~W0)Ye-=~4xxg#Zav38z3~KrxBxU2`W=0g8?MR?KmjE9H~?^gpj7C>T*;?*E%{fv1t#2A zwmzrvHqay1&t+Fi_Z+)w1n4H+Y%AMXJ&rSoCSXIQW|Hr+fhOC{~-z zRlY#ibR-jPTxR#)AT!BEO?ezTUwe>&ocp&K#iX4G4x}&l;Dj))1SC+yocOHPKcyd#4h$$Ysx{PW2wSrMAGjmd{> zmZKc2Dyf?4ujwLhFCx*5Hx~U|Z)4cF@ukC(ds5*mRqTjWZQ!rEzURPjf;fj^#543K+ z!ssm8re)pqzo9BLWxDF++xd2(u`*)aHlZZpG29)-s8jv^L!<=2n_lp*^DBVw#MvPDYjjU59hk-*=5ySF?;vN-zNZGbmhBK9h zT^c^=AHxzXuw5SuT_j1a9=(n&J?~VzvG}qlOYj8&6PtlOG82v{Ls5creeldHDY=n} z6NS98Hi+3%9-T{Nl<}Y`*yL)P*pyGtkkOKUx$aHwg>deSRCRDu3S_Bt*qYqP;^=vW z>Sial$32p`22-|}%Wtf09n6kxR~g&{ z;kf$;?1pyH#legE8IIWJMw1!v9A-Bq$dIyn#d=DTZcOxsMZN<8A29U{XY8FE^^?*t(;Wc9KRLxuFXiP-G z>e>s*`P%O)W#bh}MOrv+{^3tN%a_tNb9D8h>-eF{WYv1B{AL3=1%=#OJh|?KR$7@~ zM1%siVBJLAn~Pz$VnIy*@}LG*a&*qN<%mI`ZQi8>jN6Bzl5(ULw7YAmA5UoEllgUDu` zAewV|((5eVYOO+`<3sL2d)BS_Mok%KAB6q1*Jc7zF$H5nC_yMo`6_U&c?)aPk4b$z zk=~H8I#D$8!fS_4;uOVeZ*ca0M>wc+>X_;202 zht3{zS6QTZ`z}%LI2uqFW?YIRHI*33>s?|kWxkxSkI|mB{+aCe>R$D#3C_eDcm?~4 z04*s~%RJne@gR@YM1zFG)0DX;`R-ZeVAqWJizOR@=|SzH@w)|jt`!(`wOVk zU(Gc+3x6OSUy2;rv#hrK`;koo{3~F+?Lz<_V{4;1#8arvZ&0V8@AqY z%gOfdX610i{YAs|(!9Q+SL{EgzRT#t9JFQIGR2S`6VaKXbv2cJ2H)BOR*n|BK8B>J zu4T{_d4E~Njm&*(N{Lz*K3`qRFrPLYtX(hoRRuEpLT4Gjc z7p!#ttliZeFa!Vrd9r93wA5ijq>e&GphCV$=V%&Tr1x)APN~~@unO~heb4>d#KTM- znh1b2&I@^pv~P&tiq}$Qc2}5{Y1K+f=lfqETn=T3E>iK(`_W8&jcZK}2tO)n$}*DS zW9s~&EeO=mYgrtHq(vr!#h3NAy`7YJ8V0q&`(N)hb2~hoF87PZRGUk~lN{xCT(jsw z;Yp@T1SAT~KqTCb3a(cP)&1DNK4h=JduK2)s(9XTV?-4(76KO@#|t*-6s2Dl=w}?& z`IEOv)DCjYr5eow*?MXh8OBgmy;!t>iQ6;NbaZ0pfS*It8}lB6l1(9$AdKemI=5q_ z{7jO%*zS`ZmPK|=YMq+2r-Np*`16dZu!n^|WkFZrL^nhKO mesosConfig} import org.apache.spark.internal.config._ import org.apache.spark.network.shuffle.mesos.MesosExternalBlockStoreClient +import org.apache.spark.network.ssl.SslSampleConfigs import org.apache.spark.resource.ResourceProfile import org.apache.spark.rpc.{RpcAddress, RpcEndpointRef} import org.apache.spark.scheduler.TaskSchedulerImpl @@ -46,7 +47,7 @@ class MesosCoarseGrainedSchedulerBackendSuite extends SparkFunSuite with BeforeAndAfter with ScalaFutures { - private var sparkConf: SparkConf = _ + protected var sparkConf: SparkConf = _ private var driver: SchedulerDriver = _ private var taskScheduler: TaskSchedulerImpl = _ private var backend: MesosCoarseGrainedSchedulerBackend = _ @@ -807,7 +808,7 @@ class MesosCoarseGrainedSchedulerBackendSuite extends SparkFunSuite backend } - private def initializeSparkConf( + protected def initializeSparkConf( sparkConfVars: Map[String, String] = null, home: String = "/path"): Unit = { sparkConf = (new SparkConf) @@ -841,3 +842,13 @@ class MesosCoarseGrainedSchedulerBackendSuite extends SparkFunSuite backend = createSchedulerBackend(taskScheduler, driver, externalShuffleClient) } } + +class SslMesosCoarseGrainedSchedulerBackendSuite extends MesosCoarseGrainedSchedulerBackendSuite { + override def initializeSparkConf( + sparkConfVars: Map[String, String] = null, + home: String = "/path"): Unit = { + super.initializeSparkConf(sparkConfVars, home) + val updatedConfigs = SslSampleConfigs.createDefaultConfigMap() + updatedConfigs.entrySet().forEach(entry => sparkConf.set(entry.getKey, entry.getValue)) + } +} diff --git a/resource-managers/yarn/pom.xml b/resource-managers/yarn/pom.xml index e58ab1ea25050..6071d557b5a56 100644 --- a/resource-managers/yarn/pom.xml +++ b/resource-managers/yarn/pom.xml @@ -91,6 +91,13 @@ test-jar test + + org.apache.spark + spark-network-common_${scala.binary.version} + ${project.version} + test-jar + test + org.apache.hadoop hadoop-client-api diff --git a/resource-managers/yarn/src/test/resources/certchain.pem b/resource-managers/yarn/src/test/resources/certchain.pem new file mode 100644 index 0000000000000..1004cacc9bf9a --- /dev/null +++ b/resource-managers/yarn/src/test/resources/certchain.pem @@ -0,0 +1,17 @@ +-----BEGIN CERTIFICATE----- +MIICsDCCAZgCCQD7yXTHZWZZlDANBgkqhkiG9w0BAQsFADAaMQswCQYDVQQGEwJV +UzELMAkGA1UECAwCQ0EwHhcNMjMwNjIwMTczMjAzWhcNMzMwNjE3MTczMjAzWjAa +MQswCQYDVQQGEwJVUzELMAkGA1UECAwCQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IB +DwAwggEKAoIBAQDH4DO8IP/7xZgpzmYrBaqzsnpamq54cXP8JdQUOXP/dmh8myGg +CUau/nNdpPNr1Od2iUvf1Z9OW+KcHdNAL/zcwe1ehU3d6/M+UinDtfbEb4HSyQ31 +9AIlPSUq+pJAlsAGJYERLGHPBNXEay0r0+TR0cd9CfSN79rXUMag40pZC3zdxXmY +JpSkhNuiYfa+Z9TgXoki5MzNiyH12gAb9tO8tr55BnE5s/QujOp7LMjlf6VkE7Bp +hqj1UbcHmFw7U9jyLDfi98uIvlEDFCwXARdmLxxaYAOqdgZ3TtjBvbugVRpRFQiw +haFzkiok9bh+MclKQBKvF0ArHmMLHkcCd5oPAgMBAAEwDQYJKoZIhvcNAQELBQAD +ggEBADYIPLwlnuH6rTbkjeZFYC2UXjNesbUe1TXbsBo9DDHJUSFjNNDDAUpSzhxb +q6nMvex7tnTvTjAgOQR/qwAueAfcXHWe0EKvn4Y6yJERepSsYg5bSYBt+UJxW89R +JRLmzBFxEJy1YhsqGCh+I2wRoRz8ZGokDyqcrAlwlzXYVDfNC4wUo14Cm+s90yc3 +2I/roX/MWec8QbEbr25psAYVnRdUL1mzCeQMc83A8Y0SDPfF5ECFhvFXkVaDTULO +RddXWJoC4K5RuGa6yvpb75I8VTE3fwE2ykSgPuMShNZREDCuszkpPjjFumq9pCOJ +nUO1huCqjxC1ehPe/9/jgmzoVX4= +-----END CERTIFICATE----- diff --git a/resource-managers/yarn/src/test/resources/key.pem b/resource-managers/yarn/src/test/resources/key.pem new file mode 100644 index 0000000000000..77122755bfdaf --- /dev/null +++ b/resource-managers/yarn/src/test/resources/key.pem @@ -0,0 +1,29 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIIE6TAbBgkqhkiG9w0BBQMwDgQIGBIe7ugOgfACAggABIIEyJgkzYc/ixcvwLJC +eTzGOVwk+F1cqM4H63FOxIjroaxisceqoBmty6Rf4PJ1C9nprkSs6G/SkupbNUUB +YiWmsQ91orllbHsczAc+qaa0tmommwgt27ZrfXdXBxDB0mJWQTijkVHWfyTqcXmC +oeWlvTFsilA4CoVakryZQScl3qH/aN5zazg9gjx2xNCRwFexeccC7TqICJkPtnJC ++6wrSby2A9HlJs/MdtYyhfN360GDKvQygnw+wQj+san8EV5s7I7b45SsdEx5vOxP ++AKc6h7loWJkLrJFqDGtfqY/TY76t+sQpinS7R3sA4uYaT1bIx8Feu0GcIbnr3NS +54St9hNfOgEDmWKFj0ZmMTEISOujj8hNTKYdc0Z/dx/+izqNCuLEXiJjLDIPxfRJ +EfeYG0/4fBxdeZgIwIVVsUXX4eSzXhguuiwulNhRkUzKhH9aNrp1fw5t0hgsJOPx +O8Y2sAtDL6KUHx+rt0ejrHYXK1+BOUCHcZiHCGmLCCQlrcX5TWDYPkhtrbtbxS6m +p9aVxq7pcyxelVlUBXtWeYvcOHGueEd7QQL16uYbhrTHFIwx2Pw//LNIgyJTBNu7 +hxm2jica15PaALtSsYDRhsE9VkWawW9AXeBWOnEj7YKrT5ejrQLI9eCxtolRbVNd +gSR5r7MQkPssjCU+pdsCl98e0mxVnq8eMDtZYSIDGLEyPfJNCsxDanzUuxSfBP8K +cIDzREINA/QiuhyGxxBB8dR6k+kl1LNVy8FA7RYAe84MLW2wuaFMQirMDtTLo/Wt +/AatxW4WKlCvfd/nC8O5xlzmF5qffhgmS8xYDL/w1G3Uxo21dA4gGipH9uw91wqi +YaSidtcVs6JbHpUddmO5AiEiSBbbwqNgaOxNdur1WYWZHDNWvCKL9sqQy/HtDLHy +Tzyuw8GtrpB2BKfWWwbAApqvjcqgjitEXk2Nw/L3qWfWmVStP9ys5rz27UWRhMFi +Go/HrVh7heOxK16ei5tp2OyRLSfDBZ7+IlpbbnR26BPdBE08cuBo/ELOfifnYTTS +V4CKLMiG7RxtdAddkFKO+GgNW1nNHppBBhJzDvuBcFuUfB+AdnymZTlA8RFha7aW +zwtg6I1ABdMGPn+wzMhkkutDtSCWpkBRddJPcB1mwmRdp/2WC3NxuaMQX3anQG36 +9m2sxWUmT8ZLGvFDHIwGbRPT5zzcvIJV/xhZdCxhg/7tgLikBZBB8TmtDBck+wq+ +DPIEQkr4rObCi9xphSpHvPBGhdI5v8xbKEGLcPzVMW0hjaHouvQipEXC+ASrn/sG +nytZkyt1DD8KG27wlcrDl/RDCcjNvlKkgKPme3pPsDcD+qX+eqjQ4OM9AexW+VLZ +ZUa84/Fh6yjbuPF3vtCVRwFJURzhKMVG3Fcs7C3iczCOUNDOar9k0yCrmbACF9Wm +kSD5lXPXe1fFq0xi21Isuz+FH4A5CR/tHc2i+avQhYs9FvaqzLiaNmLaZKrhX5uy +dJXYtLruhgwBjv4eo6GXm8/WHFG6r4iaq6NEimQoT41MH+uJr9nAiBWg397JoHpG +jheCZDpZBAVuEz8NUdWP7mu64DQsjKeY6okwMlXlcSUKlMnx8QCtEMTj/JF7E7dT +bHYe30+OIWl3X88v9Q== +-----END ENCRYPTED PRIVATE KEY----- diff --git a/resource-managers/yarn/src/test/resources/keystore b/resource-managers/yarn/src/test/resources/keystore new file mode 100644 index 0000000000000000000000000000000000000000..f8310e39ba1e07c7559e5724f522c06ca47f5787 GIT binary patch literal 2247 zcmchYc{J1uAI9f5Gt8i|P1&wBlPn{@Y0#AI+9uMFEKS|9bCtJ0{)TM zX}X`!>67%Z@GWAuh_Ft8Kt!M*6TS&bii+!r0&qYVDgyu_5I7UgZ~dLDFFKbbe4NJ> z8h*OOS9N;OWepcs>OGoE=zuk2V{*wI)Z_e}>Z@^h>_v>&7v=eK%-(UR|F2)6ifSZm zB{$HW8@=O<)XbNH;_wk=FeM$Bjfx=?s>^D9Zr#6WTzln-!DYFW$=EZVD(3K>jS96w z-f`E>K|`eE2uJ#EUlg%5TBw+iWJz5iySD{o5{Ul(C)@&^f0t&B->D-6`JH0%@@;s@ zjMngAG004|Ao+Z!S-#o>U%j;FhYZ-6+Sr%89Pdns-=>tDGRpP7IeZ?->$L-DANQrdWKTa;0 zluk^040v;S@5DL7!>L;M8&vwCZAjLK*vpGqYx~-VYZs+3mb>>RYt{axVJiP>$3Y|} zz*eB_iPWr6Tc->>lU_2dn3A0UZrr!p`Ly9<%d%n&X#yvmACj3LY^dq?e=FaqJ!`fkB(%M!T4bA&bADq%;%h1-L)a{YF#I>*n5; zXt7P-gtHyc-1yawv9;te^CLkar+P2}c`q>)=Cwt62se##oHtS0qXNZJW*YMjnTYe| z1W+lZjRJNxO-J~$3RTEpZS0TIp!w}_nOBXJ>YGGE1!=AA8t_d9vGYswy&Plo@H7BgF?Rr;IN}~I_OZ5AE?Xc>e zduB^$Zl^0#&4F^xR^%KivoAj*R)05F<5T{9#!cLae!D`i$@(i5VdKPs;vD6ow-Pa0 zmfi>Du&L;*jI`*2mxHbvy2C)a@EF^M?KmG1vd1J;hO<00q{Ea0+F@!vpWZUoIem_pk7QGFApU$XWEZyP!S$ zy2#@wW_snjaE*mkb%s`~Ur~W0n&f9pXRDv9^a`mg8=d@ECh_CSHJ#du`ah#SxB9W1 z-pb!}YxjkPKt*mOLDS3IRD~MerwrgiggePgez$MStIAG30Vaz+z znP5Kohc09y*(6S=bZ0;6*@CtY{i164xeX%S_5pQfMC@N!nO0wH%Xtuc`Uu_?pnpJ3cKSbR^Nesz@fkeg8K_ zTJ35i8GW{Bgm&Uy_A)8Ar>TC80v~KUm51AD4|t?pz-*InPU(xFwfe7aK@- z&`sYxAFsV#57|9oUhntf^%Ms6?u7Ik>%Ezi3GO{ccd$K+?Z=*8-c9HP#s zOrXfNhRKwkI)1xzMcTvsXTrA@mGdnR9#$e8BDNj1us(Rjp^I@0JHr=J9h*keYb@4` zEbRm4_$*5QRieRoP)JDy&5{>VVsBkDRg>0s_n`ei%|c)v!>9n^H~H}eLNotr3B^*= z{jjq6yqK``^Vn@D41fS-8lW1evegh3Nw^$*J9JmC0%UznnvdunEUWXJm7jB#`FDt0 zo!SZ!fDlyn__i1(A!8e5JfGHGYq#O59PYAPUd^G9FA4GLhdQU@y3_KivZwp9e#sjZ z1)6E~Py4647bJ-*g&tbSSqXlAo`|VY0-a#1EcqqpmY_MpMl0!c@gNTqd?DPoAC6{F zX#Czw>93?(`H$;NoCL46jICSrt~xR}wNV^~dn<|;)#U(7hP$oGOzs-~AvLGK&g0zM zw^?bP=4NGFJ3;N}QsShyk0XSs?LW@9d~Sxj?AVZ{pOtdaJ7!gP>dq$(AFE$ic(QF_ zMtzQi_+9hZzoOnZ-qFt&6a;ssvcmgs))|WiZVphZ+9n#oo9dzuTg|>3rcC)~XD4Ad ZwPrecI^>>DS9jrYAM6Ze@sCox{su3o&c*-$ literal 0 HcmV?d00001 diff --git a/resource-managers/yarn/src/test/resources/truststore b/resource-managers/yarn/src/test/resources/truststore new file mode 100644 index 0000000000000000000000000000000000000000..a6b1d46e1f391995553771665934518114892962 GIT binary patch literal 957 zcmezO_TO6u1_mY|W(3omIr+(nIT`uIB|s66PaJ187+53pObsj<7?`UKnwZNCnwa7j zFf%bSF|h<%`7Sl!W#iOp^Jx3d%gD&h%3zRVC}6bQhKm@;iSrto7#bK@7#SNH7@I@^xuyn&24+w$on6z!sDvCGjI0dIO^o~u z22G4yOihf849&hp=Zrag|9n~Gc#H3$vhv=@pKm=9>UvU(ZZwCjnIky!nB{NDyiMQB zBZO<_+{laCF!_t`)YJQR{_Ib&x!G3fds+PIs-~1XLS?NdeqFL|Ki_tDnb_pb)#>@( zTD|J;>oi2PIZoZR+nId!%3~GY`%wb7osA|uXbd}Tx=!cX%NWDQox39rO%?vMzHf?~ z=1swLR-RoC+D>nNbu4gY&$gL|-rloc_5R@2ZL8S5%Xot9o!zH-pDYd6dHL#Xw%@*+ zy&LU+nmT%>zI)Xlb76*?{++DCc`NfA&lk?~bl&)QW6#lb?w*%6eoUWUYC4NO`N6ZZ z?8-A|%!_eU4)c+*d(ZiH(T7{hnV1hF?DgUa_CL zx_EQkYw>r1g2;ggOjE!>WMr_A)k`{P(!x=_M=);x=K055cF6ji^!W09N=!ueTVn;U z6EA8{^-Nzg`Ng@3($jCUF&@ae8^o zyyq)UdNa4Ognk!%pnCm3|2v5#(^qdW|F_DnC)CMo)7|XjC#6>R9=pT-w&U3U_Jbb| zump?#5z4RO57rKM+MK!exniP|!?*K7M~h9*`B~JdzSntD@o>*t-I;G@<(}y1FS)RE zvl(0Zzf0L`j^5p4uvCF<+hNhw literal 0 HcmV?d00001 diff --git a/resource-managers/yarn/src/test/resources/untrusted-keystore b/resource-managers/yarn/src/test/resources/untrusted-keystore new file mode 100644 index 0000000000000000000000000000000000000000..6015b02caa12817721fca3a83c8e58338b6d9aeb GIT binary patch literal 2246 zcmchYS5VUl7sc~W0)Ye-=~4xxg#Zav38z3~KrxBxU2`W=0g8?MR?KmjE9H~?^gpj7C>T*;?*E%{fv1t#2A zwmzrvHqay1&t+Fi_Z+)w1n4H+Y%AMXJ&rSoCSXIQW|Hr+fhOC{~-z zRlY#ibR-jPTxR#)AT!BEO?ezTUwe>&ocp&K#iX4G4x}&l;Dj))1SC+yocOHPKcyd#4h$$Ysx{PW2wSrMAGjmd{> zmZKc2Dyf?4ujwLhFCx*5Hx~U|Z)4cF@ukC(ds5*mRqTjWZQ!rEzURPjf;fj^#543K+ z!ssm8re)pqzo9BLWxDF++xd2(u`*)aHlZZpG29)-s8jv^L!<=2n_lp*^DBVw#MvPDYjjU59hk-*=5ySF?;vN-zNZGbmhBK9h zT^c^=AHxzXuw5SuT_j1a9=(n&J?~VzvG}qlOYj8&6PtlOG82v{Ls5creeldHDY=n} z6NS98Hi+3%9-T{Nl<}Y`*yL)P*pyGtkkOKUx$aHwg>deSRCRDu3S_Bt*qYqP;^=vW z>Sial$32p`22-|}%Wtf09n6kxR~g&{ z;kf$;?1pyH#legE8IIWJMw1!v9A-Bq$dIyn#d=DTZcOxsMZN<8A29U{XY8FE^^?*t(;Wc9KRLxuFXiP-G z>e>s*`P%O)W#bh}MOrv+{^3tN%a_tNb9D8h>-eF{WYv1B{AL3=1%=#OJh|?KR$7@~ zM1%siVBJLAn~Pz$VnIy*@}LG*a&*qN<%mI`ZQi8>jN6Bzl5(ULw7YAmA5UoEllgUDu` zAewV|((5eVYOO+`<3sL2d)BS_Mok%KAB6q1*Jc7zF$H5nC_yMo`6_U&c?)aPk4b$z zk=~H8I#D$8!fS_4;uOVeZ*ca0M>wc+>X_;202 zht3{zS6QTZ`z}%LI2uqFW?YIRHI*33>s?|kWxkxSkI|mB{+aCe>R$D#3C_eDcm?~4 z04*s~%RJne@gR@YM1zFG)0DX;`R-ZeVAqWJizOR@=|SzH@w)|jt`!(`wOVk zU(Gc+3x6OSUy2;rv#hrK`;koo{3~F+?Lz<_V{4;1#8arvZ&0V8@AqY z%gOfdX610i{YAs|(!9Q+SL{EgzRT#t9JFQIGR2S`6VaKXbv2cJ2H)BOR*n|BK8B>J zu4T{_d4E~Njm&*(N{Lz*K3`qRFrPLYtX(hoRRuEpLT4Gjc z7p!#ttliZeFa!Vrd9r93wA5ijq>e&GphCV$=V%&Tr1x)APN~~@unO~heb4>d#KTM- znh1b2&I@^pv~P&tiq}$Qc2}5{Y1K+f=lfqETn=T3E>iK(`_W8&jcZK}2tO)n$}*DS zW9s~&EeO=mYgrtHq(vr!#h3NAy`7YJ8V0q&`(N)hb2~hoF87PZRGUk~lN{xCT(jsw z;Yp@T1SAT~KqTCb3a(cP)&1DNK4h=JduK2)s(9XTV?-4(76KO@#|t*-6s2Dl=w}?& z`IEOv)DCjYr5eow*?MXh8OBgmy;!t>iQ6;NbaZ0pfS*It8}lB6l1(9$AdKemI=5q_ z{7jO%*zS`ZmPK|=YMq+2r-Np*`16dZu!n^|WkFZrL^nhKO yarnConfig.set(entry.getKey, entry.getValue)) + } +} From f0f058b9bac27123faf9e36534b1aadb204557a7 Mon Sep 17 00:00:00 2001 From: Hasnain Lakhani Date: Fri, 25 Aug 2023 13:52:52 -0700 Subject: [PATCH 2/3] typo --- .../main/java/org/apache/spark/network/ssl/SSLFactory.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common/network-common/src/main/java/org/apache/spark/network/ssl/SSLFactory.java b/common/network-common/src/main/java/org/apache/spark/network/ssl/SSLFactory.java index 35ada9a57bc42..88f547de3bcab 100644 --- a/common/network-common/src/main/java/org/apache/spark/network/ssl/SSLFactory.java +++ b/common/network-common/src/main/java/org/apache/spark/network/ssl/SSLFactory.java @@ -462,9 +462,9 @@ private static String[] enabledCipherSuites( "TLS_AES_128_GCM_SHA256", "TLS_AES_256_GCM_SHA384", // Next we have the TLS1.2 ciphers for intermediate compatibility (since JDK8 does not - // support TLS1.2) + // support TLS1.3) "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256", - "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256", + "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256", "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384", "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256", From cd6810fb62287bc972279defaaaebf090bb3dfbe Mon Sep 17 00:00:00 2001 From: Hasnain Lakhani Date: Sun, 27 Aug 2023 20:39:08 -0700 Subject: [PATCH 3/3] follow style guide for flag --- .../apache/spark/network/TransportContext.java | 2 +- .../org/apache/spark/network/ssl/SSLFactory.java | 14 +++++++------- .../apache/spark/network/util/TransportConf.java | 4 ++-- .../src/test/java/TransportConfSuite.java | 4 ++-- .../spark/network/ssl/SslSampleConfigs.java | 4 ++-- .../main/scala/org/apache/spark/SSLOptions.scala | 16 ++++++++-------- .../scala/org/apache/spark/SSLOptionsSuite.scala | 16 ++++++++-------- docs/security.md | 2 +- 8 files changed, 31 insertions(+), 31 deletions(-) diff --git a/common/network-common/src/main/java/org/apache/spark/network/TransportContext.java b/common/network-common/src/main/java/org/apache/spark/network/TransportContext.java index 696061c08cc20..81900270e2e01 100644 --- a/common/network-common/src/main/java/org/apache/spark/network/TransportContext.java +++ b/common/network-common/src/main/java/org/apache/spark/network/TransportContext.java @@ -270,7 +270,7 @@ private SSLFactory createSslFactory() { conf.sslRpcTrustStore(), conf.sslRpcTrustStorePassword(), conf.sslRpcTrustStoreReloadingEnabled(), - conf.sslRpcTrustStoreReloadInterval()) + conf.sslRpctrustStoreReloadIntervalMs()) .build(); } else { if (conf.sslRpcDangerouslyFallbackIfKeysNotPresent()) { diff --git a/common/network-common/src/main/java/org/apache/spark/network/ssl/SSLFactory.java b/common/network-common/src/main/java/org/apache/spark/network/ssl/SSLFactory.java index 88f547de3bcab..183aa3c7f2e1f 100644 --- a/common/network-common/src/main/java/org/apache/spark/network/ssl/SSLFactory.java +++ b/common/network-common/src/main/java/org/apache/spark/network/ssl/SSLFactory.java @@ -91,7 +91,7 @@ private void initJdkSslContext(final Builder b) this.keyManagers = keyManagers(b.keyStore, b.keyStorePassword); this.trustManagers = trustStoreManagers( b.trustStore, b.trustStorePassword, - b.trustStoreReloadingEnabled, b.trustStoreReloadInterval + b.trustStoreReloadingEnabled, b.trustStoreReloadIntervalMs ); this.jdkSslContext = createSSLContext(requestedProtocol, keyManagers, trustManagers); } @@ -162,7 +162,7 @@ public static class Builder { private File trustStore; private String trustStorePassword; private boolean trustStoreReloadingEnabled; - private int trustStoreReloadInterval; + private int trustStoreReloadIntervalMs; private boolean openSslEnabled; /** @@ -249,16 +249,16 @@ public Builder openSslEnabled(boolean enabled) { * @param trustStore * @param trustStorePassword * @param trustStoreReloadingEnabled - * @param trustStoreReloadInterval + * @param trustStoreReloadIntervalMs * @return */ public Builder trustStore( File trustStore, String trustStorePassword, - boolean trustStoreReloadingEnabled, int trustStoreReloadInterval) { + boolean trustStoreReloadingEnabled, int trustStoreReloadIntervalMs) { this.trustStore = trustStore; this.trustStorePassword = trustStorePassword; this.trustStoreReloadingEnabled = trustStoreReloadingEnabled; - this.trustStoreReloadInterval = trustStoreReloadInterval; + this.trustStoreReloadIntervalMs = trustStoreReloadIntervalMs; return this; } @@ -369,7 +369,7 @@ public X509Certificate[] getAcceptedIssuers() { private static TrustManager[] trustStoreManagers( File trustStore, String trustStorePassword, - boolean trustStoreReloadingEnabled, int trustStoreReloadInterval) + boolean trustStoreReloadingEnabled, int trustStoreReloadIntervalMs) throws IOException, GeneralSecurityException { if (trustStore == null || !trustStore.exists()) { return credulousTrustStoreManagers(); @@ -380,7 +380,7 @@ private static TrustManager[] trustStoreManagers( if (trustStoreReloadingEnabled) { ReloadingX509TrustManager reloading = new ReloadingX509TrustManager( - KeyStore.getDefaultType(), trustStore, trustStorePassword, trustStoreReloadInterval); + KeyStore.getDefaultType(), trustStore, trustStorePassword, trustStoreReloadIntervalMs); reloading.init(); return new TrustManager[]{reloading}; } else { diff --git a/common/network-common/src/main/java/org/apache/spark/network/util/TransportConf.java b/common/network-common/src/main/java/org/apache/spark/network/util/TransportConf.java index d4c88d2d4f920..08fb1944e8209 100644 --- a/common/network-common/src/main/java/org/apache/spark/network/util/TransportConf.java +++ b/common/network-common/src/main/java/org/apache/spark/network/util/TransportConf.java @@ -361,8 +361,8 @@ public boolean sslRpcTrustStoreReloadingEnabled() { /** * The interval, in milliseconds, the trust-store will reload its configuration */ - public int sslRpcTrustStoreReloadInterval() { - return conf.getInt("spark.ssl.rpc.trustStoreReloadInterval", 10000); + public int sslRpctrustStoreReloadIntervalMs() { + return conf.getInt("spark.ssl.rpc.trustStoreReloadIntervalMs", 10000); } /** diff --git a/common/network-common/src/test/java/TransportConfSuite.java b/common/network-common/src/test/java/TransportConfSuite.java index f018b2de1ce72..0eaf792adbd4c 100644 --- a/common/network-common/src/test/java/TransportConfSuite.java +++ b/common/network-common/src/test/java/TransportConfSuite.java @@ -85,7 +85,7 @@ public void testSslTrustStorePassword() { } @Test - public void testSslTrustStoreReloadInterval() { - assertEquals(10000, transportConf.sslRpcTrustStoreReloadInterval()); + public void testSsltrustStoreReloadIntervalMs() { + assertEquals(10000, transportConf.sslRpctrustStoreReloadIntervalMs()); } } diff --git a/common/network-common/src/test/java/org/apache/spark/network/ssl/SslSampleConfigs.java b/common/network-common/src/test/java/org/apache/spark/network/ssl/SslSampleConfigs.java index 3115c28939271..3c81b0af3186c 100644 --- a/common/network-common/src/test/java/org/apache/spark/network/ssl/SslSampleConfigs.java +++ b/common/network-common/src/test/java/org/apache/spark/network/ssl/SslSampleConfigs.java @@ -65,7 +65,7 @@ public static Map createDefaultConfigMap() { confMap.put("spark.ssl.enabled", "true"); confMap.put("spark.ssl.trustStoreReloadingEnabled", "false"); confMap.put("spark.ssl.openSslEnabled", "false"); - confMap.put("spark.ssl.trustStoreReloadInterval", "10000"); + confMap.put("spark.ssl.trustStoreReloadIntervalMs", "10000"); confMap.put("spark.ssl.keyStore", SslSampleConfigs.keyStorePath); confMap.put("spark.ssl.keyStorePassword", "password"); confMap.put("spark.ssl.privateKey", SslSampleConfigs.privateKeyPath); @@ -86,7 +86,7 @@ public static Map createDefaultConfigMapForRpcNamespace() { confMap.put("spark.ssl.rpc.enabled", "true"); confMap.put("spark.ssl.rpc.trustStoreReloadingEnabled", "false"); confMap.put("spark.ssl.rpc.openSslEnabled", "false"); - confMap.put("spark.ssl.rpc.trustStoreReloadInterval", "10000"); + confMap.put("spark.ssl.rpc.trustStoreReloadIntervalMs", "10000"); confMap.put("spark.ssl.rpc.keyStore", SslSampleConfigs.keyStorePath); confMap.put("spark.ssl.rpc.keyStorePassword", "password"); confMap.put("spark.ssl.rpc.privateKey", SslSampleConfigs.privateKeyPath); diff --git a/core/src/main/scala/org/apache/spark/SSLOptions.scala b/core/src/main/scala/org/apache/spark/SSLOptions.scala index a66065c9d65f7..acb9879bafac8 100644 --- a/core/src/main/scala/org/apache/spark/SSLOptions.scala +++ b/core/src/main/scala/org/apache/spark/SSLOptions.scala @@ -54,7 +54,7 @@ import org.apache.spark.network.util.MapConfigProvider * @param trustStoreType the type of the trust-store * @param trustStoreReloadingEnabled enables or disables using a trust-store that reloads * its configuration when the trust-store file on disk changes - * @param trustStoreReloadInterval the interval, in milliseconds, + * @param trustStoreReloadIntervalMs the interval, in milliseconds, * when the trust-store will reload its configuration * @param openSslEnabled enables or disables using an OpenSSL implementation * (if available on host system), requires certChain and keyFile arguments @@ -79,7 +79,7 @@ private[spark] case class SSLOptions( trustStorePassword: Option[String] = None, trustStoreType: Option[String] = None, trustStoreReloadingEnabled: Boolean = false, - trustStoreReloadInterval: Int = 10000, + trustStoreReloadIntervalMs: Int = 10000, openSslEnabled: Boolean = false, protocol: Option[String] = None, enabledAlgorithms: Set[String] = Set.empty, @@ -168,7 +168,7 @@ private[spark] case class SSLOptions( confMap.put(s"$nsp.enabled", enabled.toString) confMap.put(s"$nsp.trustStoreReloadingEnabled", trustStoreReloadingEnabled.toString) confMap.put(s"$nsp.openSslEnabled", openSslEnabled.toString) - confMap.put(s"$nsp.trustStoreReloadInterval", trustStoreReloadInterval.toString) + confMap.put(s"$nsp.trustStoreReloadIntervalMs", trustStoreReloadIntervalMs.toString) keyStore.map(_.getAbsolutePath).foreach(confMap.put(s"$nsp.keyStore", _)) keyStorePassword.foreach(confMap.put(s"$nsp.keyStorePassword", _)) privateKey.map(_.getAbsolutePath).foreach(confMap.put(s"$nsp.privateKey", _)) @@ -191,7 +191,7 @@ private[spark] case class SSLOptions( s"keyStoreType=$keyStoreType, needClientAuth=$needClientAuth, " + s"certChain=$certChain, trustStore=$trustStore, " + s"trustStorePassword=${trustStorePassword.map(_ => "xxx")}, " + - s"trustStoreReloadInterval=$trustStoreReloadInterval, " + + s"trustStoreReloadIntervalMs=$trustStoreReloadIntervalMs, " + s"trustStoreReloadingEnabled=$trustStoreReloadingEnabled, openSSLEnabled=$openSslEnabled, " + s"protocol=$protocol, enabledAlgorithms=$enabledAlgorithms}, " + s"dangerouslyFallbackIfKeysNotPresent=$dangerouslyFallbackIfKeysNotPresent" @@ -218,7 +218,7 @@ private[spark] object SSLOptions extends Logging { * $ - `[ns].trustStoreType` - the type of trust-store * $ - `[ns].trustStoreReloadingEnabled` - enables or disables using a trust-store * that reloads its configuration when the trust-store file on disk changes - * $ - `[ns].trustStoreReloadInterval` - the interval, in milliseconds, the + * $ - `[ns].trustStoreReloadIntervalMs` - the interval, in milliseconds, the * trust-store will reload its configuration * $ - `[ns].openSslEnabled` - enables or disables using an OpenSSL implementation * (if available on host system), requires certChain and keyFile arguments @@ -301,8 +301,8 @@ private[spark] object SSLOptions extends Logging { val trustStoreReloadingEnabled = conf.getBoolean(s"$ns.trustStoreReloadingEnabled", defaultValue = defaults.exists(_.trustStoreReloadingEnabled)) - val trustStoreReloadInterval = conf.getInt(s"$ns.trustStoreReloadInterval", - defaultValue = defaults.map(_.trustStoreReloadInterval).getOrElse(10000)) + val trustStoreReloadIntervalMs = conf.getInt(s"$ns.trustStoreReloadIntervalMs", + defaultValue = defaults.map(_.trustStoreReloadIntervalMs).getOrElse(10000)) val openSslEnabled = conf.getBoolean(s"$ns.openSslEnabled", defaultValue = defaults.exists(_.openSslEnabled)) @@ -334,7 +334,7 @@ private[spark] object SSLOptions extends Logging { trustStorePassword, trustStoreType, trustStoreReloadingEnabled, - trustStoreReloadInterval, + trustStoreReloadIntervalMs, openSslEnabled, protocol, enabledAlgorithms, diff --git a/core/src/test/scala/org/apache/spark/SSLOptionsSuite.scala b/core/src/test/scala/org/apache/spark/SSLOptionsSuite.scala index 1357fc8bda3c3..ee6bf071ef695 100644 --- a/core/src/test/scala/org/apache/spark/SSLOptionsSuite.scala +++ b/core/src/test/scala/org/apache/spark/SSLOptionsSuite.scala @@ -54,7 +54,7 @@ class SSLOptionsSuite extends SparkFunSuite { conf.set("spark.ssl.trustStore", trustStorePath) conf.set("spark.ssl.trustStorePassword", "password") conf.set("spark.ssl.trustStoreReloadingEnabled", "false") - conf.set("spark.ssl.trustStoreReloadInterval", "10000") + conf.set("spark.ssl.trustStoreReloadIntervalMs", "10000") conf.set("spark.ssl.openSslEnabled", "false") conf.set("spark.ssl.enabledAlgorithms", algorithms.mkString(",")) conf.set("spark.ssl.protocol", "TLSv1.2") @@ -70,7 +70,7 @@ class SSLOptionsSuite extends SparkFunSuite { assert(opts.keyStore.get.getAbsolutePath === keyStorePath) assert(opts.trustStorePassword === Some("password")) assert(opts.trustStoreReloadingEnabled === false) - assert(opts.trustStoreReloadInterval === 10000) + assert(opts.trustStoreReloadIntervalMs === 10000) assert(opts.privateKey.isDefined === true) assert(opts.privateKey.get.getName === "key.pem") assert(opts.privateKey.get.getAbsolutePath === privateKeyPath) @@ -101,7 +101,7 @@ class SSLOptionsSuite extends SparkFunSuite { conf.set("spark.ssl.trustStore", trustStorePath) conf.set("spark.ssl.trustStorePassword", "password") conf.set("spark.ssl.trustStoreReloadingEnabled", "false") - conf.set("spark.ssl.trustStoreReloadInterval", "10000") + conf.set("spark.ssl.trustStoreReloadIntervalMs", "10000") conf.set("spark.ssl.openSslEnabled", "false") conf.set("spark.ssl.enabledAlgorithms", "TLS_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_256_CBC_SHA") @@ -128,7 +128,7 @@ class SSLOptionsSuite extends SparkFunSuite { assert(opts.keyPassword === Some("password")) assert(opts.trustStorePassword === Some("password")) assert(opts.trustStoreReloadingEnabled === false) - assert(opts.trustStoreReloadInterval === 10000) + assert(opts.trustStoreReloadIntervalMs === 10000) assert(opts.openSslEnabled === false) assert(opts.protocol === Some("SSLv3")) assert(opts.enabledAlgorithms === @@ -155,7 +155,7 @@ class SSLOptionsSuite extends SparkFunSuite { conf.set("spark.ssl.trustStore", trustStorePath) conf.set("spark.ssl.trustStorePassword", "password") conf.set("spark.ssl.ui.trustStoreReloadingEnabled", "true") - conf.set("spark.ssl.ui.trustStoreReloadInterval", "20000") + conf.set("spark.ssl.ui.trustStoreReloadIntervalMs", "20000") conf.set("spark.ssl.ui.openSslEnabled", "true") conf.set("spark.ssl.enabledAlgorithms", "TLS_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_256_CBC_SHA") @@ -183,7 +183,7 @@ class SSLOptionsSuite extends SparkFunSuite { assert(opts.keyStorePassword === Some("12345")) assert(opts.keyPassword === Some("password")) assert(opts.trustStoreReloadingEnabled === true) - assert(opts.trustStoreReloadInterval === 20000) + assert(opts.trustStoreReloadIntervalMs === 20000) assert(opts.openSslEnabled === true) assert(opts.protocol === Some("SSLv3")) assert(opts.enabledAlgorithms === Set("ABC", "DEF")) @@ -208,7 +208,7 @@ class SSLOptionsSuite extends SparkFunSuite { conf.set("spark.ssl.trustStore", trustStorePath) conf.set("spark.ssl.trustStorePassword", "password") conf.set("spark.ssl.rpc.trustStoreReloadingEnabled", "true") - conf.set("spark.ssl.rpc.trustStoreReloadInterval", "20000") + conf.set("spark.ssl.rpc.trustStoreReloadIntervalMs", "20000") conf.set("spark.ssl.rpc.openSslEnabled", "true") conf.set("spark.ssl.enabledAlgorithms", "TLS_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_256_CBC_SHA") @@ -245,7 +245,7 @@ class SSLOptionsSuite extends SparkFunSuite { assert(opts.keyStorePassword === Some("12345")) assert(opts.keyPassword === Some("password")) assert(opts.trustStoreReloadingEnabled === true) - assert(opts.trustStoreReloadInterval === 20000) + assert(opts.trustStoreReloadIntervalMs === 20000) assert(opts.openSslEnabled === true) assert(opts.protocol === Some("SSLv3")) assert(opts.enabledAlgorithms === Set("ABC", "DEF")) diff --git a/docs/security.md b/docs/security.md index 5d273dd39a51e..3a0cbaa3a32c1 100644 --- a/docs/security.md +++ b/docs/security.md @@ -629,7 +629,7 @@ replaced with one of the above namespaces. - ${ns}.trustStoreReloadInterval + ${ns}.trustStoreReloadIntervalMs None The interval at which the trust store should be reloaded (in milliseconds).