Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Restore SSLContextRule tests #573

Merged
merged 1 commit into from
Aug 8, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -62,13 +62,13 @@ public class JnlpProtocolHandlerTest {
private static RSAKeyPairRule clientKey = new RSAKeyPairRule();
private static RSAKeyPairRule serverKey = new RSAKeyPairRule();
private static RSAKeyPairRule caRootKey = new RSAKeyPairRule();
private static X509CertificateRule caRootCert = X509CertificateRule.create("caRoot", caRootKey, caRootKey);
private static X509CertificateRule clientCert = X509CertificateRule.create("client", clientKey, caRootKey);
private static X509CertificateRule serverCert = X509CertificateRule.create("server", serverKey, caRootKey);
private static X509CertificateRule caRootCert = X509CertificateRule.create("caRoot", caRootKey, caRootKey, null);
private static X509CertificateRule clientCert = X509CertificateRule.create("client", clientKey, caRootKey, caRootCert);
private static X509CertificateRule serverCert = X509CertificateRule.create("server", serverKey, caRootKey, caRootCert);
private static X509CertificateRule expiredClientCert =
X509CertificateRule.create("expiredClient", clientKey, caRootKey, -10, -5, TimeUnit.DAYS);
X509CertificateRule.create("expiredClient", clientKey, caRootKey, caRootCert, -10, -5, TimeUnit.DAYS);
private static X509CertificateRule notYetValidServerCert =
X509CertificateRule.create("notYetValidServer", serverKey, caRootKey, +5, +10, TimeUnit.DAYS);
X509CertificateRule.create("notYetValidServer", serverKey, caRootKey, caRootCert, +5, +10, TimeUnit.DAYS);
private static SSLContextRule clientCtx =
new SSLContextRule("client")
.as(clientKey, clientCert, caRootCert)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ public class BlindTrustX509ExtendedTrustManagerTest {

public static RSAKeyPairRule key = new RSAKeyPairRule("main");

public static X509CertificateRule cert = new X509CertificateRule("main", key, key, -1, 1, TimeUnit.HOURS);
public static X509CertificateRule cert = new X509CertificateRule("main", key, key, null, -1, 1, TimeUnit.HOURS);

@ClassRule
public static RuleChain chain = RuleChain.outerRule(key)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,8 @@ public class PublicKeyMatchingX509ExtendedTrustManagerTest {
public static RSAKeyPairRule key = new RSAKeyPairRule("main");
public static RSAKeyPairRule altKey = new RSAKeyPairRule("main");

public static X509CertificateRule cert = new X509CertificateRule("main", key, key, -1, 1, TimeUnit.HOURS);
public static X509CertificateRule altCert = new X509CertificateRule("main", altKey, altKey, -1, 1, TimeUnit.HOURS);
public static X509CertificateRule cert = new X509CertificateRule("main", key, key, null, -1, 1, TimeUnit.HOURS);
public static X509CertificateRule altCert = new X509CertificateRule("main", altKey, altKey, null, -1, 1, TimeUnit.HOURS);

@ClassRule
public static RuleChain chain = RuleChain.outerRule(key)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,6 @@
*/
package org.jenkinsci.remoting.protocol.cert;

import static org.junit.Assume.assumeNoException;

import edu.umd.cs.findbugs.annotations.CheckForNull;
import edu.umd.cs.findbugs.annotations.NonNull;
import java.io.IOException;
Expand Down Expand Up @@ -52,7 +50,6 @@
import javax.net.ssl.TrustManager;
import javax.net.ssl.TrustManagerFactory;
import javax.net.ssl.X509ExtendedTrustManager;
import org.jenkinsci.remoting.util.VersionNumber;
import org.junit.rules.TestRule;
import org.junit.runner.Description;
import org.junit.runners.model.Statement;
Expand Down Expand Up @@ -96,13 +93,7 @@ private static KeyStore createKeyStore(@CheckForNull List<X509CertificateRule> c
for (int i = 0; i < key.chain.length; i++) {
chain[i] = key.chain[i].certificate();
}
try {
store.setKeyEntry("alias-" + id, key.key.getPrivate(), password, chain);
} catch (KeyStoreException e) {
if (new VersionNumber(System.getProperty("java.specification.version")).isNewerThanOrEqualTo(new VersionNumber("11")) && e.getMessage().contains("Certificate chain is not valid")) {
assumeNoException("TODO: needs triage", e);
}
}
store.setKeyEntry("alias-" + id, key.key.getPrivate(), password, chain);
id++;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,8 @@ public class ValidityCheckingX509ExtendedTrustManagerTest {

public static RSAKeyPairRule key = new RSAKeyPairRule("main");

public static X509CertificateRule cert = new X509CertificateRule("main", key, key, -1, 1, TimeUnit.HOURS);
public static X509CertificateRule expired = new X509CertificateRule("main", key, key, -100, -99, TimeUnit.HOURS);
public static X509CertificateRule cert = new X509CertificateRule("main", key, key, null, -1, 1, TimeUnit.HOURS);
public static X509CertificateRule expired = new X509CertificateRule("main", key, key, null, -100, -99, TimeUnit.HOURS);

@ClassRule
public static RuleChain chain = RuleChain.outerRule(key)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,14 +34,14 @@
import java.util.Arrays;
import java.util.Date;
import java.util.concurrent.TimeUnit;
import org.bouncycastle.asn1.x500.X500Name;
import javax.security.auth.x500.X500Principal;
import org.bouncycastle.asn1.x500.X500NameBuilder;
import org.bouncycastle.asn1.x500.style.BCStyle;
import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo;
import org.bouncycastle.asn1.x509.Extension;
import org.bouncycastle.cert.X509v3CertificateBuilder;
import org.bouncycastle.cert.jcajce.JcaX509CertificateConverter;
import org.bouncycastle.cert.jcajce.JcaX509ExtensionUtils;
import org.bouncycastle.cert.jcajce.JcaX509v3CertificateBuilder;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.operator.ContentSigner;
import org.bouncycastle.operator.jcajce.JcaContentSignerBuilder;
Expand All @@ -53,43 +53,46 @@ public class X509CertificateRule implements TestRule {
private static final BouncyCastleProvider BOUNCY_CASTLE_PROVIDER = new BouncyCastleProvider();
private final KeyPairRule<? extends PublicKey, ? extends PrivateKey> subjectKey;
private final KeyPairRule<? extends PublicKey, ? extends PrivateKey> signerKey;
private X509CertificateRule signerCertificate;
private final long startDateOffsetMillis;
private final long endDateOffsetMillis;
private final String id;
private X509Certificate certificate;

public static <PUB extends PublicKey, PRIV extends PrivateKey> X509CertificateRule selfSigned(String id, KeyPairRule<PUB,PRIV> subject) {
return new X509CertificateRule(id, subject, subject, -7, 7, TimeUnit.DAYS);
return new X509CertificateRule(id, subject, subject, null, -7, 7, TimeUnit.DAYS);
}

public static <PUB extends PublicKey, PRIV extends PrivateKey> X509CertificateRule create(String id, KeyPairRule<PUB,PRIV> subject,
KeyPairRule<PUB, PRIV> signer) {
return new X509CertificateRule(id, subject, signer, -7, 7, TimeUnit.DAYS);
KeyPairRule<PUB, PRIV> signer, X509CertificateRule signerCertificate) {
return new X509CertificateRule(id, subject, signer, signerCertificate, -7, 7, TimeUnit.DAYS);
}

public static <PUB extends PublicKey, PRIV extends PrivateKey> X509CertificateRule selfSigned(KeyPairRule<PUB,PRIV> subject) {
return selfSigned("", subject);
}

public static <PUB extends PublicKey, PRIV extends PrivateKey> X509CertificateRule create(KeyPairRule<PUB,PRIV> subject,
KeyPairRule<PUB, PRIV> signer) {
return create("", subject, signer);
KeyPairRule<PUB, PRIV> signer, X509CertificateRule signerCertificate) {
return create("", subject, signer, signerCertificate);
}

public static <PUB extends PublicKey, PRIV extends PrivateKey> X509CertificateRule create(String id,
KeyPairRule<PUB,PRIV> subject,
KeyPairRule<PUB, PRIV> signer,
X509CertificateRule signerCertificate,
long startDateOffset,
long endDateOffset,
TimeUnit units) {
return new X509CertificateRule("", subject, signer, startDateOffset, endDateOffset, units);
return new X509CertificateRule(id, subject, signer, signerCertificate, startDateOffset, endDateOffset, units);
}

public X509CertificateRule(String id, KeyPairRule<? extends PublicKey, ? extends PrivateKey> subjectKey,
KeyPairRule<? extends PublicKey, ? extends PrivateKey> signerKey, long startDateOffset, long endDateOffset, TimeUnit units) {
KeyPairRule<? extends PublicKey, ? extends PrivateKey> signerKey, X509CertificateRule signerCertificate, long startDateOffset, long endDateOffset, TimeUnit units) {
this.id = id;
this.subjectKey = subjectKey;
this.signerKey = signerKey;
this.signerCertificate = signerCertificate;
this.startDateOffsetMillis = units.toMillis(startDateOffset);
this.endDateOffsetMillis = units.toMillis(endDateOffset);
}
Expand All @@ -111,32 +114,31 @@ public void evaluate() throws Throwable {
Date firstDate = new Date(now.getTime() + startDateOffsetMillis);
Date lastDate = new Date(now.getTime() + endDateOffsetMillis);

SubjectPublicKeyInfo subjectPublicKeyInfo =
SubjectPublicKeyInfo.getInstance(subjectKey.getPublic().getEncoded());

X500NameBuilder nameBuilder = new X500NameBuilder(BCStyle.INSTANCE);
if (id != null) {
nameBuilder.addRDN(BCStyle.CN, id);
}
X500Name subject = nameBuilder
X500Principal subject = new X500Principal(nameBuilder
.addRDN(BCStyle.CN, description.getDisplayName())
.addRDN(BCStyle.C, "US")
.build();
.build().toString());

X509v3CertificateBuilder certGen = new X509v3CertificateBuilder(
subject,
X500Principal issuer = signerCertificate != null ? signerCertificate.certificate().getSubjectX500Principal() : subject;

X509v3CertificateBuilder certGen = new JcaX509v3CertificateBuilder(
issuer,
BigInteger.ONE,
firstDate,
lastDate,
subject,
subjectPublicKeyInfo
subjectKey.getPublic()
);

JcaX509ExtensionUtils instance = new JcaX509ExtensionUtils();

certGen.addExtension(Extension.subjectKeyIdentifier,
false,
instance.createSubjectKeyIdentifier(subjectPublicKeyInfo)
instance.createSubjectKeyIdentifier(subjectKey.getPublic())
);

ContentSigner signer = new JcaContentSignerBuilder("SHA1withRSA")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,13 +72,13 @@ public class SSLEngineFilterLayerTest {
private static RSAKeyPairRule clientKey = new RSAKeyPairRule();
private static RSAKeyPairRule serverKey = new RSAKeyPairRule();
private static RSAKeyPairRule caRootKey = new RSAKeyPairRule();
private static X509CertificateRule caRootCert = X509CertificateRule.create("caRoot", caRootKey, caRootKey);
private static X509CertificateRule clientCert = X509CertificateRule.create("client", clientKey, caRootKey);
private static X509CertificateRule serverCert = X509CertificateRule.create("server", serverKey, caRootKey);
private static X509CertificateRule caRootCert = X509CertificateRule.create("caRoot", caRootKey, caRootKey, null);
private static X509CertificateRule clientCert = X509CertificateRule.create("client", clientKey, caRootKey, caRootCert);
private static X509CertificateRule serverCert = X509CertificateRule.create("server", serverKey, caRootKey, caRootCert);
private static X509CertificateRule expiredClientCert =
X509CertificateRule.create("expiredClient", clientKey, caRootKey, -10, -5, TimeUnit.DAYS);
X509CertificateRule.create("expiredClient", clientKey, caRootKey, caRootCert, -10, -5, TimeUnit.DAYS);
private static X509CertificateRule notYetValidServerCert =
X509CertificateRule.create("notYetValidServer", serverKey, caRootKey, +5, +10, TimeUnit.DAYS);
X509CertificateRule.create("notYetValidServer", serverKey, caRootKey, caRootCert, +5, +10, TimeUnit.DAYS);
private static SSLContextRule clientCtx =
new SSLContextRule("client")
.as(clientKey, clientCert, caRootCert)
Expand Down