import jss-4.6.0-5.module+el8.1.0+4218+3fd65c36
This commit is contained in:
commit
d4767398bf
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
SOURCES/jss-4.6.0.tar.gz
|
1
.jss.metadata
Normal file
1
.jss.metadata
Normal file
@ -0,0 +1 @@
|
|||||||
|
3d6d2d885129e0d7d8ebac5dfe9055c693a7a9b1 SOURCES/jss-4.6.0.tar.gz
|
71
SOURCES/0001-Disable-buffer-based-tests.patch
Normal file
71
SOURCES/0001-Disable-buffer-based-tests.patch
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
From d7d6d769b510118e40d9c0919317665c4c9feb8d Mon Sep 17 00:00:00 2001
|
||||||
|
From: Alexander Scheel <alexander.m.scheel@gmail.com>
|
||||||
|
Date: Wed, 12 Jun 2019 17:17:45 -0400
|
||||||
|
Subject: [PATCH] Disable buffer-based tests
|
||||||
|
|
||||||
|
Signed-off-by: Alexander Scheel <alexander.m.scheel@gmail.com>
|
||||||
|
---
|
||||||
|
cmake/JSSTests.cmake | 33 ---------------------------------
|
||||||
|
1 file changed, 33 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/cmake/JSSTests.cmake b/cmake/JSSTests.cmake
|
||||||
|
index b389be5c..473d7d4d 100644
|
||||||
|
--- a/cmake/JSSTests.cmake
|
||||||
|
+++ b/cmake/JSSTests.cmake
|
||||||
|
@@ -78,24 +78,6 @@ macro(jss_tests)
|
||||||
|
NAME "BigObjectIdentifier"
|
||||||
|
COMMAND "org.mozilla.jss.tests.BigObjectIdentifier"
|
||||||
|
)
|
||||||
|
- jss_test_java(
|
||||||
|
- NAME "JSS_Test_PR_FileDesc"
|
||||||
|
- COMMAND "org.mozilla.jss.tests.TestPRFD"
|
||||||
|
- )
|
||||||
|
- jss_test_java(
|
||||||
|
- NAME "JSS_Test_Raw_SSL"
|
||||||
|
- COMMAND "org.mozilla.jss.tests.TestRawSSL" "${RESULTS_NSSDB_OUTPUT_DIR}"
|
||||||
|
- DEPENDS "Setup_DBs"
|
||||||
|
- )
|
||||||
|
- jss_test_java(
|
||||||
|
- NAME "JSS_Test_Buffer"
|
||||||
|
- COMMAND "org.mozilla.jss.tests.TestBuffer"
|
||||||
|
- )
|
||||||
|
- jss_test_java(
|
||||||
|
- NAME "JSS_Test_BufferPRFD"
|
||||||
|
- COMMAND "org.mozilla.jss.tests.TestBufferPRFD" "${RESULTS_NSSDB_OUTPUT_DIR}" "${DB_PWD}"
|
||||||
|
- DEPENDS "List_CA_certs"
|
||||||
|
- )
|
||||||
|
if ((${Java_VERSION_MAJOR} EQUAL 1) AND (${Java_VERSION_MINOR} LESS 9))
|
||||||
|
jss_test_java(
|
||||||
|
NAME "Test_PKCS11Constants.java_for_Sun_compatibility"
|
||||||
|
@@ -126,16 +108,6 @@ macro(jss_tests)
|
||||||
|
NAME "JUnit_UTF8StringTest"
|
||||||
|
COMMAND "org.junit.runner.JUnitCore" "org.mozilla.jss.tests.UTF8StringTest"
|
||||||
|
)
|
||||||
|
- jss_test_exec(
|
||||||
|
- NAME "buffer_size_1"
|
||||||
|
- COMMAND "${BIN_OUTPUT_DIR}/buffer_size_1"
|
||||||
|
- DEPENDS "generate_c_buffer_size_1"
|
||||||
|
- )
|
||||||
|
- jss_test_exec(
|
||||||
|
- NAME "buffer_size_4"
|
||||||
|
- COMMAND "${BIN_OUTPUT_DIR}/buffer_size_4"
|
||||||
|
- DEPENDS "generate_c_buffer_size_4"
|
||||||
|
- )
|
||||||
|
jss_test_java(
|
||||||
|
NAME "JUnit_ChainSortingTest"
|
||||||
|
COMMAND "org.junit.runner.JUnitCore" "org.mozilla.jss.tests.ChainSortingTest"
|
||||||
|
@@ -180,11 +152,6 @@ macro(jss_tests)
|
||||||
|
COMMAND "org.mozilla.jss.tests.SSLClientAuth" "${RESULTS_NSSDB_OUTPUT_DIR}" "${PASSWORD_FILE}" "${JSS_TEST_PORT_CLIENTAUTH}" "50"
|
||||||
|
DEPENDS "List_CA_certs"
|
||||||
|
)
|
||||||
|
- jss_test_exec(
|
||||||
|
- NAME "TestBufferPRFD"
|
||||||
|
- COMMAND "${BIN_OUTPUT_DIR}/TestBufferPRFD" "${RESULTS_NSSDB_OUTPUT_DIR}" "${DB_PWD}"
|
||||||
|
- DEPENDS "List_CA_certs" "generate_c_TestBufferPRFD"
|
||||||
|
- )
|
||||||
|
jss_test_java(
|
||||||
|
NAME "Key_Generation"
|
||||||
|
COMMAND "org.mozilla.jss.tests.TestKeyGen" "${RESULTS_NSSDB_OUTPUT_DIR}" "${PASSWORD_FILE}"
|
||||||
|
--
|
||||||
|
2.21.0
|
||||||
|
|
39
SOURCES/0002-Support-LD_FLAGS-from-environment.patch
Normal file
39
SOURCES/0002-Support-LD_FLAGS-from-environment.patch
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
From 731b62d4c456a3e1a70519c24eb0df2c59d943b4 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Alexander Scheel <ascheel@redhat.com>
|
||||||
|
Date: Mon, 17 Jun 2019 08:48:01 -0400
|
||||||
|
Subject: [PATCH] Support LD_FLAGS from environment
|
||||||
|
|
||||||
|
Signed-off-by: Alexander Scheel <ascheel@redhat.com>
|
||||||
|
---
|
||||||
|
cmake/JSSConfig.cmake | 8 ++++++++
|
||||||
|
1 file changed, 8 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/cmake/JSSConfig.cmake b/cmake/JSSConfig.cmake
|
||||||
|
index f045850a..e63dd5fa 100644
|
||||||
|
--- a/cmake/JSSConfig.cmake
|
||||||
|
+++ b/cmake/JSSConfig.cmake
|
||||||
|
@@ -174,6 +174,11 @@ macro(jss_config_ldflags)
|
||||||
|
list(APPEND JSS_LD_FLAGS "-lpthread")
|
||||||
|
list(APPEND JSS_LD_FLAGS "-ldl")
|
||||||
|
|
||||||
|
+ separate_arguments(PASSED_LD_FLAGS UNIX_COMMAND "${CMAKE_SHARED_LINKER_FLAGS}")
|
||||||
|
+ foreach(PASSED_LD_FLAG ${PASSED_LD_FLAGS})
|
||||||
|
+ list(INSERT JSS_LD_FLAGS 0 "${PASSED_LD_FLAG}")
|
||||||
|
+ endforeach()
|
||||||
|
+
|
||||||
|
# This set of flags is specific to building the libjss library.
|
||||||
|
list(APPEND JSS_LIBRARY_FLAGS "-shared")
|
||||||
|
list(APPEND JSS_LIBRARY_FLAGS "-Wl,-z,defs")
|
||||||
|
@@ -181,6 +186,9 @@ macro(jss_config_ldflags)
|
||||||
|
list(APPEND JSS_LIBRARY_FLAGS "-Wl,${JSS_SO}")
|
||||||
|
|
||||||
|
set(JSS_VERSION_SCRIPT "-Wl,--version-script,${PROJECT_SOURCE_DIR}/lib/jss.map")
|
||||||
|
+
|
||||||
|
+ message(STATUS "JSS LD FLAGS: ${JSS_LD_FLAGS}")
|
||||||
|
+ message(STATUS "JSS LIBRARY FLAGS: ${JSS_LIBRARY_FLAGS}")
|
||||||
|
endmacro()
|
||||||
|
|
||||||
|
macro(jss_config_java)
|
||||||
|
--
|
||||||
|
2.20.1
|
||||||
|
|
2197
SOURCES/0003-Remove-legacy-DSA-implementation.patch
Normal file
2197
SOURCES/0003-Remove-legacy-DSA-implementation.patch
Normal file
File diff suppressed because it is too large
Load Diff
346
SOURCES/0004-JSS-CVE-2019-14823-fix.patch
Normal file
346
SOURCES/0004-JSS-CVE-2019-14823-fix.patch
Normal file
@ -0,0 +1,346 @@
|
|||||||
|
From 233795b098a17269f8495fee312fe6df404a236d Mon Sep 17 00:00:00 2001
|
||||||
|
From: Alexander Scheel <ascheel@redhat.com>
|
||||||
|
Date: Wed, 4 Sep 2019 08:33:14 -0400
|
||||||
|
Subject: [PATCH] Fix root certificate validation
|
||||||
|
|
||||||
|
When the Leaf and Chain OCSP checking policy is enabled in
|
||||||
|
CryptoManager, JSS will switch to alternative certificate verification
|
||||||
|
logic in JSSL_DefaultCertAuthCallback. In this method, the root
|
||||||
|
certificate was incorrectly trusted without being verified to exist in
|
||||||
|
the trust store.
|
||||||
|
|
||||||
|
This patch cleans up the logic in JSSL_verifyCertPKIX and makes it
|
||||||
|
more explicit in addition to fixing the error.
|
||||||
|
|
||||||
|
Fixes CVE-2019-14823
|
||||||
|
|
||||||
|
Signed-off-by: Alexander Scheel <ascheel@redhat.com>
|
||||||
|
---
|
||||||
|
org/mozilla/jss/ssl/common.c | 239 ++++++++++++++++++++---------------
|
||||||
|
1 file changed, 136 insertions(+), 103 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/org/mozilla/jss/ssl/common.c b/org/mozilla/jss/ssl/common.c
|
||||||
|
index 1bbfed45..2db9fda1 100644
|
||||||
|
--- a/org/mozilla/jss/ssl/common.c
|
||||||
|
+++ b/org/mozilla/jss/ssl/common.c
|
||||||
|
@@ -904,7 +904,6 @@ finish:
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Get the trusted anchor for pkix */
|
||||||
|
-
|
||||||
|
CERTCertificate *getRoot(CERTCertificate *cert,
|
||||||
|
SECCertUsage certUsage)
|
||||||
|
{
|
||||||
|
@@ -938,79 +937,84 @@ finish:
|
||||||
|
return root;
|
||||||
|
}
|
||||||
|
|
||||||
|
-/* Verify a cert using explicit PKIX call.
|
||||||
|
- * For now only used in OCSP AIA context.
|
||||||
|
- * The result of this call will be a full chain
|
||||||
|
- * and leaf network AIA ocsp validation.
|
||||||
|
- * The policy param will be used in the future to
|
||||||
|
- * handle more scenarios.
|
||||||
|
- */
|
||||||
|
-
|
||||||
|
-SECStatus JSSL_verifyCertPKIX(CERTCertificate *cert,
|
||||||
|
- SECCertificateUsage certificateUsage,secuPWData *pwdata, int ocspPolicy,
|
||||||
|
- CERTVerifyLog *log, SECCertificateUsage *usage)
|
||||||
|
+/* Internal helper for the below call. */
|
||||||
|
+static SECStatus
|
||||||
|
+JSSL_verifyCertPKIXInternal(CERTCertificate *cert,
|
||||||
|
+ SECCertificateUsage certificateUsage, secuPWData *pwdata, int ocspPolicy,
|
||||||
|
+ CERTVerifyLog *log, SECCertificateUsage *usage,
|
||||||
|
+ CERTCertList *trustedCertList)
|
||||||
|
{
|
||||||
|
-
|
||||||
|
- /* put the first set of possible flags internally here first */
|
||||||
|
- /* later there could be a more complete list to choose from */
|
||||||
|
- /* support our hard core fetch aia ocsp policy for now */
|
||||||
|
-
|
||||||
|
- static PRUint64 ocsp_Enabled_Hard_Policy_LeafFlags[2] = {
|
||||||
|
+ /* Put the first set of possible flags internally here first. Later
|
||||||
|
+ * there could be a more complete list to choose from; for now we only
|
||||||
|
+ * support our hard core fetch AIA OCSP policy. Note that we disable
|
||||||
|
+ * CRL fetching as Dogtag doesn't support it. Additionally, enable OCSP
|
||||||
|
+ * checking on the chained CA certificates. Since NSS/PKIX's
|
||||||
|
+ * CERT_GetClassicOCSPEnabledHardFailurePolicy doesn't do what we want,
|
||||||
|
+ * we construct the policy ourselves. */
|
||||||
|
+ PRUint64 ocsp_Enabled_Hard_Policy_LeafFlags[2] = {
|
||||||
|
/* crl */
|
||||||
|
- 0,
|
||||||
|
+ CERT_REV_M_DO_NOT_TEST_USING_THIS_METHOD,
|
||||||
|
/* ocsp */
|
||||||
|
CERT_REV_M_TEST_USING_THIS_METHOD |
|
||||||
|
- CERT_REV_M_FAIL_ON_MISSING_FRESH_INFO
|
||||||
|
+ CERT_REV_M_FAIL_ON_MISSING_FRESH_INFO
|
||||||
|
};
|
||||||
|
|
||||||
|
- static PRUint64 ocsp_Enabled_Hard_Policy_ChainFlags[2] = {
|
||||||
|
+ PRUint64 ocsp_Enabled_Hard_Policy_ChainFlags[2] = {
|
||||||
|
/* crl */
|
||||||
|
- 0,
|
||||||
|
+ CERT_REV_M_DO_NOT_TEST_USING_THIS_METHOD,
|
||||||
|
/* ocsp */
|
||||||
|
CERT_REV_M_TEST_USING_THIS_METHOD |
|
||||||
|
- CERT_REV_M_FAIL_ON_MISSING_FRESH_INFO
|
||||||
|
+ CERT_REV_M_FAIL_ON_MISSING_FRESH_INFO
|
||||||
|
};
|
||||||
|
|
||||||
|
- static CERTRevocationMethodIndex
|
||||||
|
- ocsp_Enabled_Hard_Policy_Method_Preference = {
|
||||||
|
- cert_revocation_method_ocsp
|
||||||
|
- };
|
||||||
|
-
|
||||||
|
- static CERTRevocationFlags ocsp_Enabled_Hard_Policy = {
|
||||||
|
- { /* leafTests */
|
||||||
|
- 2,
|
||||||
|
- ocsp_Enabled_Hard_Policy_LeafFlags,
|
||||||
|
- 1,
|
||||||
|
- &ocsp_Enabled_Hard_Policy_Method_Preference,
|
||||||
|
- 0 },
|
||||||
|
- { /* chainTests */
|
||||||
|
- 2,
|
||||||
|
- ocsp_Enabled_Hard_Policy_ChainFlags,
|
||||||
|
- 1,
|
||||||
|
- &ocsp_Enabled_Hard_Policy_Method_Preference,
|
||||||
|
- 0 }
|
||||||
|
+ CERTRevocationMethodIndex ocsp_Enabled_Hard_Policy_Method_Preference[1] = {
|
||||||
|
+ cert_revocation_method_ocsp
|
||||||
|
};
|
||||||
|
|
||||||
|
- /* for future expansion */
|
||||||
|
+ CERTRevocationFlags ocsp_Enabled_Hard_Policy = {
|
||||||
|
+ /* CERTRevocationTests - leafTests */
|
||||||
|
+ {
|
||||||
|
+ /* number_of_defined_methods */
|
||||||
|
+ 2,
|
||||||
|
+ /* cert_rev_flags_per_method */
|
||||||
|
+ ocsp_Enabled_Hard_Policy_LeafFlags,
|
||||||
|
+ /* number_of_preferred_methods */
|
||||||
|
+ 1,
|
||||||
|
+ /* preferred_methods */
|
||||||
|
+ ocsp_Enabled_Hard_Policy_Method_Preference,
|
||||||
|
+ /* cert_rev_method_independent_flags */
|
||||||
|
+ 0
|
||||||
|
+ },
|
||||||
|
+ /* CERTRevocationTests - chainTests */
|
||||||
|
+ {
|
||||||
|
+ /* number_of_defined_methods */
|
||||||
|
+ 2,
|
||||||
|
+ /* cert_rev_flags_per_method */
|
||||||
|
+ ocsp_Enabled_Hard_Policy_ChainFlags,
|
||||||
|
+ /* number_of_preferred_methods */
|
||||||
|
+ 1,
|
||||||
|
+ /* preferred_methods */
|
||||||
|
+ ocsp_Enabled_Hard_Policy_Method_Preference,
|
||||||
|
+ /* cert_rev_method_independent_flags */
|
||||||
|
+ 0
|
||||||
|
+ }
|
||||||
|
+ };
|
||||||
|
|
||||||
|
- CERTValOutParam cvout[20] = {{0}};
|
||||||
|
- CERTValInParam cvin[20] = {{0}};
|
||||||
|
+ /* The size of these objects are defined here based upon maximum possible
|
||||||
|
+ * inputs. A dynamic allocation could reallocate based upon actual usage,
|
||||||
|
+ * however this would affect the size by at most one or two. Note that,
|
||||||
|
+ * due to the required usage of cert_pi_end/cert_po_end, these sizes are
|
||||||
|
+ * inflated by one. */
|
||||||
|
+ CERTValOutParam cvout[3] = {{0}};
|
||||||
|
+ CERTValInParam cvin[6] = {{0}};
|
||||||
|
|
||||||
|
+ int usageIndex = -1;
|
||||||
|
int inParamIndex = 0;
|
||||||
|
int outParamIndex = 0;
|
||||||
|
- CERTRevocationFlags *rev = NULL;
|
||||||
|
-
|
||||||
|
- CERTCertList *trustedCertList = NULL;
|
||||||
|
-
|
||||||
|
- PRBool fetchCerts = PR_FALSE;
|
||||||
|
|
||||||
|
- SECCertUsage certUsage = certUsageSSLClient /* 0 */;
|
||||||
|
-
|
||||||
|
SECStatus res = SECFailure;
|
||||||
|
|
||||||
|
- CERTCertificate *root = NULL;
|
||||||
|
-
|
||||||
|
- if(cert == NULL) {
|
||||||
|
+ if (cert == NULL) {
|
||||||
|
goto finish;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -1018,93 +1022,122 @@ SECStatus JSSL_verifyCertPKIX(CERTCertificate *cert,
|
||||||
|
goto finish;
|
||||||
|
}
|
||||||
|
|
||||||
|
- /* Force the strict ocsp network check on chain
|
||||||
|
- and leaf.
|
||||||
|
- */
|
||||||
|
-
|
||||||
|
- fetchCerts = PR_TRUE;
|
||||||
|
- rev = &ocsp_Enabled_Hard_Policy;
|
||||||
|
-
|
||||||
|
- /* fetch aia over net */
|
||||||
|
-
|
||||||
|
+ /* Enable live AIA fetching over the network. */
|
||||||
|
cvin[inParamIndex].type = cert_pi_useAIACertFetch;
|
||||||
|
- cvin[inParamIndex].value.scalar.b = fetchCerts;
|
||||||
|
- inParamIndex++;
|
||||||
|
-
|
||||||
|
- /* time */
|
||||||
|
+ cvin[inParamIndex].value.scalar.b = PR_TRUE;
|
||||||
|
+ inParamIndex++;
|
||||||
|
|
||||||
|
+ /* By setting the time to zero, we choose the current time when the
|
||||||
|
+ * check is performed. */
|
||||||
|
cvin[inParamIndex].type = cert_pi_date;
|
||||||
|
- cvin[inParamIndex].value.scalar.time = PR_Now();
|
||||||
|
+ cvin[inParamIndex].value.scalar.time = 0;
|
||||||
|
inParamIndex++;
|
||||||
|
|
||||||
|
- /* flags */
|
||||||
|
-
|
||||||
|
+ /* Force the strict OCSP check on both the leaf and its chain. */
|
||||||
|
cvin[inParamIndex].type = cert_pi_revocationFlags;
|
||||||
|
- cvin[inParamIndex].value.pointer.revocation = rev;
|
||||||
|
+ cvin[inParamIndex].value.pointer.revocation = &ocsp_Enabled_Hard_Policy;
|
||||||
|
inParamIndex++;
|
||||||
|
|
||||||
|
- /* establish trust anchor */
|
||||||
|
-
|
||||||
|
- /* We need to convert the SECCertificateUsage to a SECCertUsage to obtain
|
||||||
|
- * the root.
|
||||||
|
- */
|
||||||
|
-
|
||||||
|
- SECCertificateUsage testUsage = certificateUsage;
|
||||||
|
- while (0 != (testUsage = testUsage >> 1)) { certUsage++; }
|
||||||
|
-
|
||||||
|
- root = getRoot(cert,certUsage);
|
||||||
|
-
|
||||||
|
- /* Try to add the root as the trust anchor so all the
|
||||||
|
- other memebers of the ca chain will get validated.
|
||||||
|
- */
|
||||||
|
-
|
||||||
|
- if( root != NULL ) {
|
||||||
|
- trustedCertList = CERT_NewCertList();
|
||||||
|
- CERT_AddCertToListTail(trustedCertList, root);
|
||||||
|
-
|
||||||
|
+ /* Establish a trust anchor if it is passed to us. NOTE: this trust anchor
|
||||||
|
+ * must previously be validated before it is passed to us here. */
|
||||||
|
+ if (trustedCertList != NULL) {
|
||||||
|
cvin[inParamIndex].type = cert_pi_trustAnchors;
|
||||||
|
cvin[inParamIndex].value.pointer.chain = trustedCertList;
|
||||||
|
-
|
||||||
|
inParamIndex++;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ /* Done establishing input parameters. */
|
||||||
|
cvin[inParamIndex].type = cert_pi_end;
|
||||||
|
|
||||||
|
- if(log != NULL) {
|
||||||
|
+ /* When we need to log rationale for failure, pass it as an output
|
||||||
|
+ * parameter. */
|
||||||
|
+ if (log != NULL) {
|
||||||
|
cvout[outParamIndex].type = cert_po_errorLog;
|
||||||
|
cvout[outParamIndex].value.pointer.log = log;
|
||||||
|
outParamIndex ++;
|
||||||
|
}
|
||||||
|
|
||||||
|
- int usageIndex = 0;
|
||||||
|
- if(usage != NULL) {
|
||||||
|
+ /* When we need to inquire about the resulting certificate usage, pass it
|
||||||
|
+ * here. */
|
||||||
|
+ if (usage != NULL) {
|
||||||
|
usageIndex = outParamIndex;
|
||||||
|
cvout[outParamIndex].type = cert_po_usages;
|
||||||
|
cvout[outParamIndex].value.scalar.usages = 0;
|
||||||
|
outParamIndex ++;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ /* Done establishing output parameters. */
|
||||||
|
cvout[outParamIndex].type = cert_po_end;
|
||||||
|
|
||||||
|
+ /* Call into NSS's PKIX library to validate our certificate. */
|
||||||
|
res = CERT_PKIXVerifyCert(cert, certificateUsage, cvin, cvout, &pwdata);
|
||||||
|
|
||||||
|
finish:
|
||||||
|
- /* clean up any trusted cert list */
|
||||||
|
-
|
||||||
|
+ /* Clean up any certificates in the trusted certificate list. This was
|
||||||
|
+ * a passed input parameter, but by taking ownership of it and clearing it,
|
||||||
|
+ * we enable tail calls to this function. */
|
||||||
|
if (trustedCertList) {
|
||||||
|
+ /* CERT_DestroyCertList destroys interior certs for us. */
|
||||||
|
CERT_DestroyCertList(trustedCertList);
|
||||||
|
trustedCertList = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
- /* CERT_DestroyCertList destroys interior certs for us. */
|
||||||
|
-
|
||||||
|
- if(root) {
|
||||||
|
- root = NULL;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- if(res == SECSuccess && usage) {
|
||||||
|
+ if (res == SECSuccess && usage && usageIndex != -1) {
|
||||||
|
*usage = cvout[usageIndex].value.scalar.usages;
|
||||||
|
}
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+/* Verify a cert using an explicit PKIX call. For now only perform this call
|
||||||
|
+ * when the OCSP policy is set to leaf and chain. Performs a blocking, online
|
||||||
|
+ * OCSP status refresh. The result of this call will be a full-chain OCSP
|
||||||
|
+ * validation.
|
||||||
|
+ *
|
||||||
|
+ * In the future, we'll use ocspPolicy to condition around additional policies
|
||||||
|
+ * and handle them all with this method (and a call to PKIX).
|
||||||
|
+ *
|
||||||
|
+ * Note that this currently requires the certificate to be added directly
|
||||||
|
+ * to the NSS DB. We can't otherwise validate against root certificates in
|
||||||
|
+ * the default NSS DB.
|
||||||
|
+ */
|
||||||
|
+SECStatus JSSL_verifyCertPKIX(CERTCertificate *cert,
|
||||||
|
+ SECCertificateUsage certificateUsage, secuPWData *pwdata, int ocspPolicy,
|
||||||
|
+ CERTVerifyLog *log, SECCertificateUsage *usage)
|
||||||
|
+{
|
||||||
|
+ SECCertUsage certUsage = certUsageSSLClient /* 0 */;
|
||||||
|
+
|
||||||
|
+ /* We need to convert the SECCertificateUsage to a SECCertUsage to obtain
|
||||||
|
+ * the root.
|
||||||
|
+ */
|
||||||
|
+
|
||||||
|
+ SECCertificateUsage testUsage = certificateUsage;
|
||||||
|
+ while (0 != (testUsage = testUsage >> 1)) { certUsage++; }
|
||||||
|
+
|
||||||
|
+ CERTCertificate *root = getRoot(cert, certUsage);
|
||||||
|
+
|
||||||
|
+ // Two cases: either the root is present, or it isn't.
|
||||||
|
+ if (root == NULL) {
|
||||||
|
+ /* In this case, we've had a hard time finding the root. In all
|
||||||
|
+ * likelihood, the following call will fail to validate the end cert
|
||||||
|
+ * as well and thus fail to validate. I don't believe there's a risk
|
||||||
|
+ * in trying it however. */
|
||||||
|
+ return JSSL_verifyCertPKIXInternal(cert, certificateUsage, pwdata,
|
||||||
|
+ ocspPolicy, log, usage, NULL);
|
||||||
|
+ } else {
|
||||||
|
+ /* In this case, we've found the root certificate. Before passing it
|
||||||
|
+ * to the leaf, explicitly validate it with strict OCSP checking. Then
|
||||||
|
+ * validate the leaf certificate with a known and trusted root
|
||||||
|
+ * certificate. */
|
||||||
|
+ SECStatus ret = JSSL_verifyCertPKIXInternal(root, certificateUsageSSLCA,
|
||||||
|
+ pwdata, ocspPolicy, log, usage, NULL);
|
||||||
|
+ if (ret != SECSuccess) {
|
||||||
|
+ return ret;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ CERTCertList *rootList = CERT_NewCertList();
|
||||||
|
+ CERT_AddCertToListTail(rootList, root);
|
||||||
|
+ return JSSL_verifyCertPKIXInternal(cert, certificateUsage, pwdata,
|
||||||
|
+ ocspPolicy, log, usage, rootList);
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
--
|
||||||
|
2.21.0
|
||||||
|
|
91
SOURCES/0005-Add-helper-to-run-a-single-test-case.patch
Normal file
91
SOURCES/0005-Add-helper-to-run-a-single-test-case.patch
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
From 7d1c481e947edf0786223ef43a359c8d5771a214 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Alexander Scheel <ascheel@redhat.com>
|
||||||
|
Date: Wed, 28 Aug 2019 09:23:41 -0400
|
||||||
|
Subject: [PATCH 1/3] Add helper to run a single test case
|
||||||
|
|
||||||
|
run_test.sh.in is templated by CMake to build/run_test.sh, fully
|
||||||
|
configured to your test execution environment. In particular, it writes
|
||||||
|
the classpath and loads the JSS native library.
|
||||||
|
|
||||||
|
Signed-off-by: Alexander Scheel <ascheel@redhat.com>
|
||||||
|
---
|
||||||
|
cmake/JSSConfig.cmake | 29 +++++++++++++++++++----------
|
||||||
|
tools/run_test.sh.in | 15 +++++++++++++++
|
||||||
|
2 files changed, 34 insertions(+), 10 deletions(-)
|
||||||
|
create mode 100755 tools/run_test.sh.in
|
||||||
|
|
||||||
|
diff --git a/cmake/JSSConfig.cmake b/cmake/JSSConfig.cmake
|
||||||
|
index 27b2a9bf..6295a6e3 100644
|
||||||
|
--- a/cmake/JSSConfig.cmake
|
||||||
|
+++ b/cmake/JSSConfig.cmake
|
||||||
|
@@ -13,6 +13,9 @@ macro(jss_config)
|
||||||
|
|
||||||
|
# Configure java-related flags
|
||||||
|
jss_config_java()
|
||||||
|
+
|
||||||
|
+ # Template auto-generated files
|
||||||
|
+ jss_config_template()
|
||||||
|
endmacro()
|
||||||
|
|
||||||
|
macro(jss_config_version MAJOR MINOR PATCH BETA)
|
||||||
|
@@ -45,16 +48,6 @@ macro(jss_config_version MAJOR MINOR PATCH BETA)
|
||||||
|
set(JSS_VERSION "${JSS_VERSION} beta ${JSS_VERSION_BETA}")
|
||||||
|
set(JSS_VERSION_STR "${JSS_VERSION_STR}_b${JSS_VERSION_BETA}")
|
||||||
|
endif()
|
||||||
|
-
|
||||||
|
- # Template files
|
||||||
|
- configure_file(
|
||||||
|
- "${PROJECT_SOURCE_DIR}/org/mozilla/jss/util/jssver.h.in"
|
||||||
|
- "${PROJECT_SOURCE_DIR}/org/mozilla/jss/util/jssver.h"
|
||||||
|
- )
|
||||||
|
- configure_file(
|
||||||
|
- "${PROJECT_SOURCE_DIR}/lib/MANIFEST.MF.in"
|
||||||
|
- "${CMAKE_BINARY_DIR}/MANIFEST.MF"
|
||||||
|
- )
|
||||||
|
endmacro()
|
||||||
|
|
||||||
|
macro(jss_config_outputs)
|
||||||
|
@@ -326,3 +319,19 @@ macro(jss_config_java)
|
||||||
|
math(EXPR JSS_TEST_PORT_CLIENTAUTH ${JSS_BASE_PORT}+0)
|
||||||
|
math(EXPR JSS_TEST_PORT_CLIENTAUTH_FIPS ${JSS_BASE_PORT}+1)
|
||||||
|
endmacro()
|
||||||
|
+
|
||||||
|
+macro(jss_config_template)
|
||||||
|
+ # Template files
|
||||||
|
+ configure_file(
|
||||||
|
+ "${PROJECT_SOURCE_DIR}/org/mozilla/jss/util/jssver.h.in"
|
||||||
|
+ "${PROJECT_SOURCE_DIR}/org/mozilla/jss/util/jssver.h"
|
||||||
|
+ )
|
||||||
|
+ configure_file(
|
||||||
|
+ "${PROJECT_SOURCE_DIR}/lib/MANIFEST.MF.in"
|
||||||
|
+ "${CMAKE_BINARY_DIR}/MANIFEST.MF"
|
||||||
|
+ )
|
||||||
|
+ configure_file(
|
||||||
|
+ "${PROJECT_SOURCE_DIR}/tools/run_test.sh.in"
|
||||||
|
+ "${CMAKE_BINARY_DIR}/run_test.sh"
|
||||||
|
+ )
|
||||||
|
+endmacro()
|
||||||
|
diff --git a/tools/run_test.sh.in b/tools/run_test.sh.in
|
||||||
|
new file mode 100755
|
||||||
|
index 00000000..60233c05
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/tools/run_test.sh.in
|
||||||
|
@@ -0,0 +1,15 @@
|
||||||
|
+#!/bin/bash
|
||||||
|
+
|
||||||
|
+# This utility gets templated to build/run_test.sh to help with running a
|
||||||
|
+# single test after building JSS. This gives the caller more flexibility
|
||||||
|
+# with command line arguments and ensures that the correct build artifacts
|
||||||
|
+# get used.
|
||||||
|
+
|
||||||
|
+export LD_LIBRARY_PATH="${CMAKE_BINARY_DIR}"
|
||||||
|
+
|
||||||
|
+if [ "$1" == "--gdb" ]; then
|
||||||
|
+ shift
|
||||||
|
+ gdb --args "${Java_JAVA_EXECUTABLE}" -classpath "${TEST_CLASSPATH}" -ea -Djava.library.path="${CMAKE_BINARY_DIR}" "$@"
|
||||||
|
+else
|
||||||
|
+ "${Java_JAVA_EXECUTABLE}" -classpath "${TEST_CLASSPATH}" -ea -Djava.library.path="${CMAKE_BINARY_DIR}" "$@"
|
||||||
|
+fi
|
||||||
|
--
|
||||||
|
2.21.0
|
||||||
|
|
59
SOURCES/0006-Add-script-to-add-common-root-CAs.patch
Normal file
59
SOURCES/0006-Add-script-to-add-common-root-CAs.patch
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
From 61985f642b0b5cc75fc3f254ef6c99aeb56acbe2 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Alexander Scheel <ascheel@redhat.com>
|
||||||
|
Date: Thu, 29 Aug 2019 16:14:08 -0400
|
||||||
|
Subject: [PATCH 2/3] Add script to add common root CAs
|
||||||
|
|
||||||
|
When given an NSS DB, common_roots.sh uses the trust command to extract
|
||||||
|
the root CAs trusted by the local system and add them to said NSS DB.
|
||||||
|
|
||||||
|
Signed-off-by: Alexander Scheel <ascheel@redhat.com>
|
||||||
|
---
|
||||||
|
tools/common_roots.sh | 36 ++++++++++++++++++++++++++++++++++++
|
||||||
|
1 file changed, 36 insertions(+)
|
||||||
|
create mode 100755 tools/common_roots.sh
|
||||||
|
|
||||||
|
diff --git a/tools/common_roots.sh b/tools/common_roots.sh
|
||||||
|
new file mode 100755
|
||||||
|
index 00000000..97341c4c
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/tools/common_roots.sh
|
||||||
|
@@ -0,0 +1,36 @@
|
||||||
|
+#!/bin/bash
|
||||||
|
+
|
||||||
|
+# This script reads the contents of the OS CA bundle store,
|
||||||
|
+# /usr/share/pki/ca-trust-source/ca-bundle.trust.p11-kit
|
||||||
|
+# and places the contained CAs into the specified NSS DB.
|
||||||
|
+#
|
||||||
|
+# This NSS DB is used by various JSS tests that aren't enabled
|
||||||
|
+# by default because they require an active internet connection.
|
||||||
|
+
|
||||||
|
+nssdb="$1"
|
||||||
|
+
|
||||||
|
+if [ -z "$nssdb" ] && [ -e "build" ]; then
|
||||||
|
+ nssdb="build/results/cadb"
|
||||||
|
+elif [ -z "$nssdb" ] && [ -e "../build" ]; then
|
||||||
|
+ nssdb="../build/results/cadb"
|
||||||
|
+else
|
||||||
|
+ echo "Must provide path to NSS DB!" 1>&2
|
||||||
|
+ exit 1
|
||||||
|
+fi
|
||||||
|
+
|
||||||
|
+if [ -e "$nssdb" ]; then
|
||||||
|
+ rm -rf "$nssdb"
|
||||||
|
+fi
|
||||||
|
+
|
||||||
|
+mkdir -p "$nssdb"
|
||||||
|
+echo "" > "$nssdb/password.txt"
|
||||||
|
+certutil -N -d "$nssdb" -f "$nssdb/password.txt"
|
||||||
|
+
|
||||||
|
+trust extract --format=pem-bundle --filter=ca-anchors "$nssdb/complete.pem"
|
||||||
|
+
|
||||||
|
+# From: https://serverfault.com/questions/391396/how-to-split-a-pem-file
|
||||||
|
+csplit -f "$nssdb/individual-" "$nssdb/complete.pem" '/-----BEGIN CERTIFICATE-----/' '{*}'
|
||||||
|
+
|
||||||
|
+for cert in "$nssdb"/individual*; do
|
||||||
|
+ certutil -A -a -i "$cert" -n "$cert" -t CT,C,C -d "$nssdb" -f "$nssdb/password.txt"
|
||||||
|
+done
|
||||||
|
--
|
||||||
|
2.21.0
|
||||||
|
|
233
SOURCES/0007-Add-optional-test-case-against-badssl.com.patch
Normal file
233
SOURCES/0007-Add-optional-test-case-against-badssl.com.patch
Normal file
@ -0,0 +1,233 @@
|
|||||||
|
From 7b4c0fa04f5e4469fc8bc442c9f12f975c5e1610 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Alexander Scheel <ascheel@redhat.com>
|
||||||
|
Date: Wed, 28 Aug 2019 09:23:41 -0400
|
||||||
|
Subject: [PATCH 3/3] Add optional test case against badssl.com
|
||||||
|
|
||||||
|
badssl.com maintains a number of subdomains with valid and invalid TLS
|
||||||
|
configurations. A number of these test certificates which fail in
|
||||||
|
certain scenarios (revoked, expired, etc). Add a test runner which
|
||||||
|
validates SSLSocket's implementation against badssl.com.
|
||||||
|
|
||||||
|
Signed-off-by: Alexander Scheel <ascheel@redhat.com>
|
||||||
|
---
|
||||||
|
org/mozilla/jss/tests/BadSSL.java | 208 ++++++++++++++++++++++++++++++
|
||||||
|
1 file changed, 208 insertions(+)
|
||||||
|
create mode 100644 org/mozilla/jss/tests/BadSSL.java
|
||||||
|
|
||||||
|
diff --git a/org/mozilla/jss/tests/BadSSL.java b/org/mozilla/jss/tests/BadSSL.java
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000..60bfe820
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/org/mozilla/jss/tests/BadSSL.java
|
||||||
|
@@ -0,0 +1,208 @@
|
||||||
|
+package org.mozilla.jss.tests;
|
||||||
|
+
|
||||||
|
+import org.mozilla.jss.CryptoManager;
|
||||||
|
+
|
||||||
|
+import org.mozilla.jss.ssl.SSLSocket;
|
||||||
|
+import org.mozilla.jss.ssl.SSLSocketException;
|
||||||
|
+
|
||||||
|
+import org.mozilla.jss.util.NativeErrcodes;
|
||||||
|
+
|
||||||
|
+/**
|
||||||
|
+ * The BadSSL test case maintains an internal mapping from badssl.com
|
||||||
|
+ * subdomains to expected exceptions and validates they occur.
|
||||||
|
+ *
|
||||||
|
+ * Since badssl.com offers no guaranteed SLA or availability, we likely
|
||||||
|
+ * shouldn't add this site to automated tests.
|
||||||
|
+ */
|
||||||
|
+
|
||||||
|
+public class BadSSL {
|
||||||
|
+ public static void main(String[] args) throws Exception {
|
||||||
|
+ boolean ocsp = false;
|
||||||
|
+
|
||||||
|
+ if (args.length < 1) {
|
||||||
|
+ System.out.println("Usage: BadSSL nssdb [LEAF_AND_CHAIN]");
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (args.length >= 2 && args[1].equals("LEAF_AND_CHAIN")) {
|
||||||
|
+ System.out.println("Enabling leaf and chain policy...");
|
||||||
|
+ ocsp = true;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ CryptoManager.initialize(args[0]);
|
||||||
|
+ CryptoManager cm = CryptoManager.getInstance();
|
||||||
|
+
|
||||||
|
+ if (ocsp) {
|
||||||
|
+ cm.setOCSPPolicy(CryptoManager.OCSPPolicy.LEAF_AND_CHAIN);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+ // Test cases which should fail due to various certificate errors.
|
||||||
|
+ testExpired();
|
||||||
|
+ testWrongHost();
|
||||||
|
+ testSelfSigned();
|
||||||
|
+ testUntrustedRoot();
|
||||||
|
+
|
||||||
|
+ // The following test cases depend on crypto-policies or local NSS
|
||||||
|
+ // configuration.
|
||||||
|
+ testSHA1();
|
||||||
|
+ testRC4MD5();
|
||||||
|
+ testRC4();
|
||||||
|
+ test3DES();
|
||||||
|
+ testNULL();
|
||||||
|
+
|
||||||
|
+ // The following test cases depend on OCSP being enabled.
|
||||||
|
+ if (ocsp) {
|
||||||
|
+ testRevoked();
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ // Test cases which should pass given the correct root certs.
|
||||||
|
+ testSHA256();
|
||||||
|
+ testSHA384();
|
||||||
|
+ testSHA512();
|
||||||
|
+
|
||||||
|
+ testECC256();
|
||||||
|
+ testECC384();
|
||||||
|
+
|
||||||
|
+ testRSA2048();
|
||||||
|
+ testRSA4096();
|
||||||
|
+ testRSA8192();
|
||||||
|
+
|
||||||
|
+ testExtendedValidation();
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /* Test cases whose handshakes should fail below. */
|
||||||
|
+
|
||||||
|
+ public static void testExpired() throws Exception {
|
||||||
|
+ testHelper("expired.badssl.com", 443, new String[]{ "(-8181)", "has expired" });
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ public static void testWrongHost() throws Exception {
|
||||||
|
+ testHelper("wrong.host.badssl.com", 443, new String[]{ "(-12276)", "domain name does not match" });
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ public static void testSelfSigned() throws Exception {
|
||||||
|
+ testHelper("self-signed.badssl.com", 443, new String[]{ "(-8101)", "(-8156)", "type not approved", "issuer certificate is invalid" });
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ public static void testUntrustedRoot() throws Exception {
|
||||||
|
+ testHelper("untrusted-root.badssl.com", 443, new String[]{ "(-8172)", "certificate issuer has been marked as not trusted" });
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ public static void testRevoked() throws Exception {
|
||||||
|
+ testHelper("revoked.badssl.com", 443, new String[]{ "(-8180)", "has been revoked" });
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ public static void testSHA1() throws Exception {
|
||||||
|
+ testHelper("sha1-intermediate.badssl.com", 443, new String[] { "(-12286)", "Cannot communicate securely" });
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ public static void testRC4MD5() throws Exception {
|
||||||
|
+ testHelper("rc4-md5.badssl.com", 443, new String[] { "(-12286)", "Cannot communicate securely" });
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ public static void testRC4() throws Exception {
|
||||||
|
+ testHelper("rc4.badssl.com", 443, new String[] { "(-12286)", "Cannot communicate securely" });
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ public static void test3DES() throws Exception {
|
||||||
|
+ testHelper("3des.badssl.com", 443, new String[] { "(-12286)", "Cannot communicate securely" });
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ public static void testNULL() throws Exception {
|
||||||
|
+ testHelper("null.badssl.com", 443, new String[] { "(-12286)", "Cannot communicate securely" });
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /* Test cases which should handshake successfully below. */
|
||||||
|
+
|
||||||
|
+ public static void testSHA256() throws Exception {
|
||||||
|
+ testHelper("sha256.badssl.com", 443);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ public static void testSHA384() throws Exception {
|
||||||
|
+ testHelper("sha384.badssl.com", 443);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ public static void testSHA512() throws Exception {
|
||||||
|
+ testHelper("sha512.badssl.com", 443);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ public static void testECC256() throws Exception {
|
||||||
|
+ testHelper("ecc256.badssl.com", 443);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ public static void testECC384() throws Exception {
|
||||||
|
+ testHelper("ecc384.badssl.com", 443);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ public static void testRSA2048() throws Exception {
|
||||||
|
+ testHelper("rsa2048.badssl.com", 443);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ public static void testRSA4096() throws Exception {
|
||||||
|
+ testHelper("rsa4096.badssl.com", 443);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ public static void testRSA8192() throws Exception {
|
||||||
|
+ testHelper("rsa8192.badssl.com", 443);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ public static void testExtendedValidation() throws Exception {
|
||||||
|
+ testHelper("extended-validation.badssl.com", 443);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /* Test case helpers. */
|
||||||
|
+
|
||||||
|
+ public static void testHelper(String host, int port) throws Exception {
|
||||||
|
+ testSite(host, port);
|
||||||
|
+ System.out.println("\t...ok");
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ public static void testHelper(String host, int port, String[] substrs) throws Exception {
|
||||||
|
+ try {
|
||||||
|
+ testSite(host, port);
|
||||||
|
+ } catch (SSLSocketException sse) {
|
||||||
|
+ String actual = sse.getMessage().toLowerCase();
|
||||||
|
+
|
||||||
|
+ for (String expected : substrs) {
|
||||||
|
+ if (actual.contains(expected.toLowerCase())) {
|
||||||
|
+ System.out.println("\t...got expected error message.");
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ System.err.println("\tUnexpected error message: " + actual);
|
||||||
|
+ throw sse;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ throw new RuntimeException("Expected to get an exception, but didn't!");
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ public static void testHelper(String host, int port, int[] codes) throws Exception {
|
||||||
|
+ try {
|
||||||
|
+ testSite(host, port);
|
||||||
|
+ } catch (SSLSocketException sse) {
|
||||||
|
+ int actual = sse.getErrcode();
|
||||||
|
+ for (int expected : codes) {
|
||||||
|
+ if (actual == expected) {
|
||||||
|
+ System.out.println("\t...got expected error code.");
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ System.err.println("\tUnexpected error code: " + actual);
|
||||||
|
+ throw sse;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ throw new RuntimeException("Expected to get an exception, but didn't!");
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ public static void testSite(String host, int port) throws Exception {
|
||||||
|
+ System.out.println("Testing connection to " + host + ":" + port);
|
||||||
|
+ SSLSocket sock = new SSLSocket(host, 443);
|
||||||
|
+ sock.forceHandshake();
|
||||||
|
+ sock.shutdownOutput();
|
||||||
|
+ sock.shutdownInput();
|
||||||
|
+ sock.close();
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
--
|
||||||
|
2.21.0
|
||||||
|
|
205
SPECS/jss.spec
Normal file
205
SPECS/jss.spec
Normal file
@ -0,0 +1,205 @@
|
|||||||
|
################################################################################
|
||||||
|
Name: jss
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
Summary: Java Security Services (JSS)
|
||||||
|
URL: http://www.dogtagpki.org/wiki/JSS
|
||||||
|
License: MPLv1.1 or GPLv2+ or LGPLv2+
|
||||||
|
|
||||||
|
Version: 4.6.0
|
||||||
|
Release: 5%{?_timestamp}%{?_commit_id}%{?dist}
|
||||||
|
# global _phase -a1
|
||||||
|
|
||||||
|
# To generate the source tarball:
|
||||||
|
# $ git clone https://github.com/dogtagpki/jss.git
|
||||||
|
# $ cd jss
|
||||||
|
# $ git tag v4.5.<z>
|
||||||
|
# $ git push origin v4.5.<z>
|
||||||
|
# Then go to https://github.com/dogtagpki/jss/releases and download the source
|
||||||
|
# tarball.
|
||||||
|
Source: https://github.com/dogtagpki/%{name}/archive/v%{version}%{?_phase}/%{name}-%{version}%{?_phase}.tar.gz
|
||||||
|
|
||||||
|
# To create a patch for all changes since a version tag:
|
||||||
|
# $ git format-patch \
|
||||||
|
# --stdout \
|
||||||
|
# <version tag> \
|
||||||
|
# > jss-VERSION-RELEASE.patch
|
||||||
|
# Patch: jss-VERSION-RELEASE.patch
|
||||||
|
Patch1: 0001-Disable-buffer-based-tests.patch
|
||||||
|
Patch2: 0002-Support-LD_FLAGS-from-environment.patch
|
||||||
|
Patch3: 0003-Remove-legacy-DSA-implementation.patch
|
||||||
|
Patch4: 0004-JSS-CVE-2019-14823-fix.patch
|
||||||
|
Patch5: 0005-Add-helper-to-run-a-single-test-case.patch
|
||||||
|
Patch6: 0006-Add-script-to-add-common-root-CAs.patch
|
||||||
|
Patch7: 0007-Add-optional-test-case-against-badssl.com.patch
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Build Dependencies
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
# autosetup
|
||||||
|
BuildRequires: git
|
||||||
|
BuildRequires: make
|
||||||
|
BuildRequires: cmake
|
||||||
|
|
||||||
|
BuildRequires: gcc-c++
|
||||||
|
BuildRequires: nspr-devel >= 4.13.1
|
||||||
|
BuildRequires: nss-devel >= 3.30
|
||||||
|
BuildRequires: nss-tools >= 3.30
|
||||||
|
BuildRequires: java-devel
|
||||||
|
BuildRequires: jpackage-utils
|
||||||
|
BuildRequires: slf4j
|
||||||
|
BuildRequires: glassfish-jaxb-api
|
||||||
|
%if 0%{?rhel} && 0%{?rhel} <= 7
|
||||||
|
# no slf4j-jdk14
|
||||||
|
%else
|
||||||
|
BuildRequires: slf4j-jdk14
|
||||||
|
%endif
|
||||||
|
BuildRequires: apache-commons-lang
|
||||||
|
BuildRequires: apache-commons-codec
|
||||||
|
|
||||||
|
BuildRequires: junit
|
||||||
|
|
||||||
|
Requires: nss >= 3.30
|
||||||
|
Requires: java-headless
|
||||||
|
Requires: jpackage-utils
|
||||||
|
Requires: slf4j
|
||||||
|
Requires: glassfish-jaxb-api
|
||||||
|
%if 0%{?rhel} && 0%{?rhel} <= 7
|
||||||
|
# no slf4j-jdk14
|
||||||
|
%else
|
||||||
|
Requires: slf4j-jdk14
|
||||||
|
%endif
|
||||||
|
Requires: apache-commons-lang
|
||||||
|
Requires: apache-commons-codec
|
||||||
|
|
||||||
|
Conflicts: ldapjdk < 4.20
|
||||||
|
Conflicts: idm-console-framework < 1.2
|
||||||
|
Conflicts: tomcatjss < 7.3.4
|
||||||
|
Conflicts: pki-base < 10.6.5
|
||||||
|
|
||||||
|
%description
|
||||||
|
Java Security Services (JSS) is a java native interface which provides a bridge
|
||||||
|
for java-based applications to use native Network Security Services (NSS).
|
||||||
|
This only works with gcj. Other JREs require that JCE providers be signed.
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
%package javadoc
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
Summary: Java Security Services (JSS) Javadocs
|
||||||
|
Group: Documentation
|
||||||
|
Requires: jss = %{version}-%{release}
|
||||||
|
|
||||||
|
%description javadoc
|
||||||
|
This package contains the API documentation for JSS.
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
%prep
|
||||||
|
|
||||||
|
%autosetup -n %{name}-%{version}%{?_phase} -p 1 -S git
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
%build
|
||||||
|
|
||||||
|
%set_build_flags
|
||||||
|
|
||||||
|
[ -z "$JAVA_HOME" ] && export JAVA_HOME=%{_jvmdir}/java
|
||||||
|
|
||||||
|
# Enable compiler optimizations
|
||||||
|
export BUILD_OPT=1
|
||||||
|
|
||||||
|
# Generate symbolic info for debuggers
|
||||||
|
CFLAGS="-g $RPM_OPT_FLAGS"
|
||||||
|
export CFLAGS
|
||||||
|
|
||||||
|
# The Makefile is not thread-safe
|
||||||
|
rm -rf build && mkdir -p build && cd build
|
||||||
|
%cmake \
|
||||||
|
-DJAVA_HOME=%{java_home} \
|
||||||
|
-DJAVA_LIB_INSTALL_DIR=%{_jnidir} \
|
||||||
|
..
|
||||||
|
|
||||||
|
%{__make} all
|
||||||
|
%{__make} javadoc || true
|
||||||
|
ctest --output-on-failure
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
%install
|
||||||
|
|
||||||
|
# There is no install target so we'll do it by hand
|
||||||
|
|
||||||
|
# jars
|
||||||
|
install -d -m 0755 $RPM_BUILD_ROOT%{_jnidir}
|
||||||
|
install -m 644 build/jss4.jar ${RPM_BUILD_ROOT}%{_jnidir}/jss4.jar
|
||||||
|
|
||||||
|
# We have to use the name libjss4.so because this is dynamically
|
||||||
|
# loaded by the jar file.
|
||||||
|
install -d -m 0755 $RPM_BUILD_ROOT%{_libdir}/jss
|
||||||
|
install -m 0755 build/libjss4.so ${RPM_BUILD_ROOT}%{_libdir}/jss/
|
||||||
|
pushd ${RPM_BUILD_ROOT}%{_libdir}/jss
|
||||||
|
ln -fs %{_jnidir}/jss4.jar jss4.jar
|
||||||
|
popd
|
||||||
|
|
||||||
|
# javadoc
|
||||||
|
install -d -m 0755 $RPM_BUILD_ROOT%{_javadocdir}/%{name}-%{version}
|
||||||
|
cp -rp build/docs/* $RPM_BUILD_ROOT%{_javadocdir}/%{name}-%{version}
|
||||||
|
cp -p jss.html $RPM_BUILD_ROOT%{_javadocdir}/%{name}-%{version}
|
||||||
|
cp -p *.txt $RPM_BUILD_ROOT%{_javadocdir}/%{name}-%{version}
|
||||||
|
|
||||||
|
# No ldconfig is required since this library is loaded by Java itself.
|
||||||
|
################################################################################
|
||||||
|
%files
|
||||||
|
|
||||||
|
%defattr(-,root,root,-)
|
||||||
|
%doc jss.html MPL-1.1.txt gpl.txt lgpl.txt
|
||||||
|
%{_libdir}/*
|
||||||
|
%{_jnidir}/*
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
%files javadoc
|
||||||
|
|
||||||
|
%defattr(-,root,root,-)
|
||||||
|
%{_javadocdir}/%{name}-%{version}/
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
%changelog
|
||||||
|
* Wed Sep 11 2019 Red Hat PKI Team <rhcs-maint@redhat.com> 4.6.0-5
|
||||||
|
- Bugzilla #1747987 - CVE 2019-14823 jss: OCSP policy "Leaf and Chain" implicitly trusts the root certificate
|
||||||
|
|
||||||
|
* Wed Aug 14 2019 Red Hat PKI Team <rhcs-maint@redhat.com> 4.6.0-4
|
||||||
|
- Red Hat Bugzilla #1698059 - pki-core implements crypto
|
||||||
|
|
||||||
|
* Tue Jul 16 2019 Red Hat PKI Team <rhcs-maint@redhat.com> 4.6.0-3
|
||||||
|
- Red Hat Bugilla #1721135 - JSS - LD_FLAGS support
|
||||||
|
|
||||||
|
* Wed Jun 12 2019 Red Hat PKI Team <rhcs-maint@redhat.com> 4.6.0-2
|
||||||
|
- Minor updates to release
|
||||||
|
|
||||||
|
* Wed Jun 12 2019 Red Hat PKI Team <rhcs-maint@redhat.com> 4.6.0-1
|
||||||
|
- Rebased to JSS 4.6.0
|
||||||
|
|
||||||
|
* Thu Apr 25 2019 Red Hat PKI Team <rhcs-maint@redhat.com> 4.5.3-1
|
||||||
|
- Rebased to JSS 4.5.3
|
||||||
|
|
||||||
|
* Fri Aug 10 2018 Red Hat PKI Team <rhcs-maint@redhat.com> 4.5.0-1
|
||||||
|
- Rebased to JSS 4.5.0
|
||||||
|
|
||||||
|
* Tue Aug 07 2018 Red Hat PKI Team <rhcs-maint@redhat.com> 4.5.0-0.6
|
||||||
|
- Rebased to JSS 4.5.0-b1
|
||||||
|
|
||||||
|
* Tue Aug 07 2018 Red Hat PKI Team <rhcs-maint@redhat.com> 4.5.0-0.5
|
||||||
|
- Red Hat Bugzilla #1612063 - Do not override system crypto policy (support TLS 1.3)
|
||||||
|
|
||||||
|
* Fri Jul 20 2018 Red Hat PKI Team <rhcs-maint@redhat.com> 4.5.0-0.4
|
||||||
|
- Rebased to JSS 4.5.0-a4
|
||||||
|
- Red Hat Bugzilla #1604462 - jss: FTBFS in Fedora rawhide
|
||||||
|
|
||||||
|
* Thu Jul 05 2018 Red Hat PKI Team <rhcs-maint@redhat.com> 4.5.0-0.3
|
||||||
|
- Rebased to JSS 4.5.0-a3
|
||||||
|
|
||||||
|
* Fri Jun 22 2018 Red Hat PKI Team <rhcs-maint@redhat.com> 4.5.0-0.2
|
||||||
|
- Rebased to JSS 4.5.0-a2
|
||||||
|
|
||||||
|
* Fri Jun 15 2018 Red Hat PKI Team <rhcs-maint@redhat.com> 4.5.0-0.1
|
||||||
|
- Rebased to JSS 4.5.0-a1
|
Loading…
Reference in New Issue
Block a user