diff --git a/hbase-assembly/pom.xml b/hbase-assembly/pom.xml
index 6a317045109b..a6e88cdbf77e 100644
--- a/hbase-assembly/pom.xml
+++ b/hbase-assembly/pom.xml
@@ -61,6 +61,10 @@
compile
+
+ org.apache.hbase
+ hbase-openssl
+
org.apache.hbase
hbase-server
diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/io/crypto/tls/X509Util.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/io/crypto/tls/X509Util.java
index fff32866fb9a..46809050b5a3 100644
--- a/hbase-common/src/main/java/org/apache/hadoop/hbase/io/crypto/tls/X509Util.java
+++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/io/crypto/tls/X509Util.java
@@ -299,7 +299,8 @@ public static SslContext createSslContextForClient(Configuration config)
* Adds SslProvider.OPENSSL if OpenSsl is available and enabled. In order to make it available,
* one must ensure that a properly shaded netty-tcnative is on the classpath. Properly shaded
* means relocated to be prefixed with "org.apache.hbase.thirdparty" like the rest of the netty
- * classes.
+ * classes. We make available org.apache.hbase:hbase-openssl as a convenience module which one can
+ * use to pull in a shaded netty-tcnative statically linked against boringssl.
*/
private static boolean configureOpenSslIfAvailable(SslContextBuilder sslContextBuilder,
Configuration conf) {
diff --git a/hbase-extensions/hbase-openssl/pom.xml b/hbase-extensions/hbase-openssl/pom.xml
new file mode 100644
index 000000000000..7158c2f4197e
--- /dev/null
+++ b/hbase-extensions/hbase-openssl/pom.xml
@@ -0,0 +1,43 @@
+
+
+
+ 4.0.0
+
+ org.apache.hbase
+ hbase-extensions
+ ${revision}
+ ../pom.xml
+
+
+ hbase-openssl
+ jar
+ Apache HBase - OpenSSL support for TLS RPC
+ Includes tcnative bindings so that netty TLS can use OpenSSL
+
+
+
+ org.apache.hbase.thirdparty
+ hbase-shaded-netty-tcnative
+ runtime
+
+
+
+
diff --git a/hbase-extensions/pom.xml b/hbase-extensions/pom.xml
new file mode 100644
index 000000000000..8a11e7754ea2
--- /dev/null
+++ b/hbase-extensions/pom.xml
@@ -0,0 +1,99 @@
+
+
+
+ 4.0.0
+
+ org.apache.hbase
+ hbase-build-configuration
+ ${revision}
+ ../hbase-build-configuration
+
+
+ hbase-extensions
+ pom
+ Apache HBase - Extensions
+ Parent for optional extension modules
+
+
+ hbase-openssl
+
+
+
+
+
+
+
+ com.github.spotbugs
+ spotbugs-maven-plugin
+
+ ${project.basedir}/../../dev-support/spotbugs-exclude.xml
+ true
+ true
+ Max
+
+
+
+
+ maven-assembly-plugin
+
+ true
+
+
+
+
+
+
+
+ com.github.spotbugs
+ spotbugs-maven-plugin
+
+
+
+ spotbugs
+
+ false
+
+ ${project.basedir}/../dev-support/spotbugs-exclude.xml
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-checkstyle-plugin
+
+ true
+
+
+
+
+ maven-assembly-plugin
+
+ true
+
+
+
+
+
+
diff --git a/pom.xml b/pom.xml
index a59379f8dc92..a32e73fb3377 100644
--- a/pom.xml
+++ b/pom.xml
@@ -758,6 +758,7 @@
hbase-asyncfs
hbase-logging
hbase-compression
+ hbase-extensions
scm:git:git://gitbox.apache.org/repos/asf/hbase.git
@@ -1331,6 +1332,11 @@
hbase-compression-zstd
${project.version}
+
+ org.apache.hbase
+ hbase-openssl
+ ${project.version}
+
com.github.stephenc.findbugs
@@ -1749,6 +1755,11 @@
hbase-shaded-netty
${hbase-thirdparty.version}
+
+ org.apache.hbase.thirdparty
+ hbase-shaded-netty-tcnative
+ ${hbase-thirdparty.version}
+
org.apache.hbase.thirdparty
hbase-shaded-protobuf