Skip to content

Commit 400459f

Browse files
authored
Merge pull request #613 from RUB-NDS/pemCertificateDelegate
Pem certificate delegate
2 parents 766b826 + a16f0e9 commit 400459f

File tree

5 files changed

+72
-11
lines changed

5 files changed

+72
-11
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# TLS-Attacker
22

3-
[![release](https://img.shields.io/badge/Release-v3.3.0-blue.svg)](https://github.com/RUB-NDS/TLS-Attacker/releases)
3+
[![release](https://img.shields.io/badge/Release-v3.4.0-blue.svg)](https://github.com/RUB-NDS/TLS-Attacker/releases)
44
![licence](https://img.shields.io/badge/License-Apachev2-brightgreen.svg)
55
[![travis](https://travis-ci.org/RUB-NDS/TLS-Attacker.svg?branch=master)](https://travis-ci.org/RUB-NDS/TLS-Attacker)
66

TLS-Core/src/main/java/de/rub/nds/tlsattacker/core/certificate/CertificateKeyPair.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -359,7 +359,7 @@ public void adjustInContext(TlsContext context, ConnectionEndType connectionEnd)
359359
if (privateKey != null) {
360360
privateKey.adjustInContext(context, connectionEnd);
361361
}
362-
context.setSelectedGroup(publicKeyGroup);
362+
context.setEcCertificateCurve(publicKeyGroup);
363363
if (context.getConfig().getAutoAdjustSignatureAndHashAlgorithm()) {
364364
// TODO rething auto selection
365365
SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.RSA;

TLS-Core/src/main/java/de/rub/nds/tlsattacker/core/config/delegate/CertificateDelegate.java

Lines changed: 54 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,15 @@
1111
import com.beust.jcommander.Parameter;
1212
import com.beust.jcommander.ParameterException;
1313
import de.rub.nds.tlsattacker.core.certificate.CertificateKeyPair;
14+
import de.rub.nds.tlsattacker.core.certificate.PemUtil;
1415
import de.rub.nds.tlsattacker.core.config.Config;
16+
import de.rub.nds.tlsattacker.core.crypto.keys.CustomPrivateKey;
1517
import de.rub.nds.tlsattacker.core.exceptions.ConfigurationException;
18+
import de.rub.nds.tlsattacker.core.util.CertificateUtils;
1619
import de.rub.nds.tlsattacker.core.util.JKSLoader;
1720
import de.rub.nds.tlsattacker.transport.ConnectionEndType;
1821
import de.rub.nds.tlsattacker.util.KeystoreHandler;
22+
import java.io.File;
1923
import java.io.IOException;
2024
import java.security.KeyStore;
2125
import java.security.KeyStoreException;
@@ -32,6 +36,12 @@
3236

3337
public class CertificateDelegate extends Delegate {
3438

39+
@Parameter(names = "-cert", description = "PEM encoded certificate file")
40+
private String certificate = null;
41+
42+
@Parameter(names = "-key", description = "PEM encoded private key")
43+
private String key = null;
44+
3545
@Parameter(names = "-keystore", description = "Java Key Store (JKS) file to use as a certificate")
3646
private String keystore = null;
3747

@@ -68,12 +78,56 @@ public void setAlias(String alias) {
6878
this.alias = alias;
6979
}
7080

81+
public String getCertificate() {
82+
return certificate;
83+
}
84+
85+
public void setCertificate(String certificate) {
86+
this.certificate = certificate;
87+
}
88+
89+
public String getKey() {
90+
return key;
91+
}
92+
93+
public void setKey(String key) {
94+
this.key = key;
95+
}
96+
7197
@Override
7298
public void applyDelegate(Config config) {
7399
Map<String, String> mandatoryParameters = new HashMap<>();
74100
mandatoryParameters.put("keystore", keystore);
75101
mandatoryParameters.put("password", password);
76102
mandatoryParameters.put("alias", alias);
103+
104+
PrivateKey privateKey = null;
105+
if (key != null) {
106+
LOGGER.debug("Loading private key");
107+
try {
108+
privateKey = PemUtil.readPrivateKey(new File(key));
109+
CustomPrivateKey customPrivateKey = CertificateUtils.parseCustomPrivateKey(privateKey);
110+
customPrivateKey.adjustInConfig(config, ConnectionEndType.CLIENT);
111+
customPrivateKey.adjustInConfig(config, ConnectionEndType.SERVER);
112+
113+
} catch (IOException ex) {
114+
LOGGER.warn("Could not read private key", ex);
115+
}
116+
}
117+
if (certificate != null) {
118+
LOGGER.debug("Loading ceritificate");
119+
try {
120+
Certificate cert = PemUtil.readCertificate(new File(certificate));
121+
if (privateKey != null) {
122+
config.setDefaultExplicitCertificateKeyPair(new CertificateKeyPair(cert, privateKey));
123+
} else {
124+
config.setDefaultExplicitCertificateKeyPair(new CertificateKeyPair(cert));
125+
}
126+
config.setAutoSelectCertificate(false);
127+
} catch (Exception ex) {
128+
LOGGER.warn("Could not read certificate", ex);
129+
}
130+
}
77131
List<String> missingParameters = new ArrayList<>();
78132
for (String p : mandatoryParameters.keySet()) {
79133
if (mandatoryParameters.get(p) == null) {
@@ -102,7 +156,6 @@ public void applyDelegate(Config config) {
102156
}
103157
KeyStore store = KeystoreHandler.loadKeyStore(keystore, password);
104158
Certificate cert = JKSLoader.loadTLSCertificate(store, alias);
105-
PrivateKey privateKey = null;
106159
privateKey = (PrivateKey) store.getKey(alias, password.toCharArray());
107160
CertificateKeyPair pair = new CertificateKeyPair(cert, privateKey);
108161
pair.adjustInConfig(config, type);

TLS-Core/src/main/java/de/rub/nds/tlsattacker/core/crypto/keys/CustomECPrivateKey.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -85,11 +85,11 @@ public void adjustInContext(TlsContext context, ConnectionEndType ownerOfKey) {
8585
switch (ownerOfKey) {
8686
case CLIENT:
8787
context.setClientEcPrivateKey(privatekey);
88-
context.setSelectedGroup(group);
88+
context.setEcCertificateCurve(group);
8989
break;
9090
case SERVER:
9191
context.setServerEcPrivateKey(privatekey);
92-
context.setSelectedGroup(group);
92+
context.setEcCertificateCurve(group);
9393
break;
9494
default:
9595
throw new IllegalArgumentException("Owner of Key " + ownerOfKey + " is not supported");
@@ -105,11 +105,11 @@ public void adjustInConfig(Config config, ConnectionEndType ownerOfKey) {
105105
switch (ownerOfKey) {
106106
case CLIENT:
107107
config.setDefaultClientEcPrivateKey(privatekey);
108-
config.setDefaultSelectedNamedGroup(group);
108+
config.setDefaultEcCertificateCurve(group);
109109
break;
110110
case SERVER:
111111
config.setDefaultServerEcPrivateKey(privatekey);
112-
config.setDefaultSelectedNamedGroup(group);
112+
config.setDefaultEcCertificateCurve(group);
113113
break;
114114
default:
115115
throw new IllegalArgumentException("Owner of Key " + ownerOfKey + " is not supported");

TLS-Core/src/main/java/de/rub/nds/tlsattacker/core/crypto/keys/CustomEcPublicKey.java

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -73,11 +73,15 @@ public void adjustInContext(TlsContext context, ConnectionEndType ownerOfKey) {
7373
switch (ownerOfKey) {
7474
case CLIENT:
7575
context.setClientEcPublicKey(point);
76-
context.setSelectedGroup(group);
76+
if (group != null) {
77+
context.setEcCertificateCurve(group);
78+
}
7779
break;
7880
case SERVER:
7981
context.setServerEcPublicKey(point);
80-
context.setSelectedGroup(group);
82+
if (group != null) {
83+
context.setEcCertificateCurve(group);
84+
}
8185
break;
8286
default:
8387
throw new IllegalArgumentException("Owner of Key " + ownerOfKey + " is not supported");
@@ -125,11 +129,15 @@ public void adjustInConfig(Config config, ConnectionEndType ownerOfKey) {
125129
switch (ownerOfKey) {
126130
case CLIENT:
127131
config.setDefaultClientEcPublicKey(point);
128-
config.setDefaultSelectedNamedGroup(group);
132+
if (group != null) {
133+
config.setDefaultEcCertificateCurve(group);
134+
}
129135
break;
130136
case SERVER:
131137
config.setDefaultServerEcPublicKey(point);
132-
config.setDefaultSelectedNamedGroup(group);
138+
if (group != null) {
139+
config.setDefaultEcCertificateCurve(group);
140+
}
133141
break;
134142
default:
135143
throw new IllegalArgumentException("Owner of Key " + ownerOfKey + " is not supported");

0 commit comments

Comments
 (0)