Skip to content
This repository was archived by the owner on Jun 5, 2025. It is now read-only.
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
92 changes: 41 additions & 51 deletions examples/TppClient.java
Original file line number Diff line number Diff line change
@@ -1,72 +1,62 @@
import java.security.cert.CertificateEncodingException;
import java.util.Arrays;
import java.util.Collections;
import com.venafi.vcert.sdk.Config;
import com.venafi.vcert.sdk.VCertException;
import com.venafi.vcert.sdk.VCertClient;

import com.venafi.vcert.sdk.VCertException;
import com.venafi.vcert.sdk.certificate.CertificateRequest;
import com.venafi.vcert.sdk.certificate.KeyType;
import com.venafi.vcert.sdk.certificate.PEMCollection;
import com.venafi.vcert.sdk.certificate.RenewalRequest;
import com.venafi.vcert.sdk.connectors.tpp.ZoneConfiguration;
import com.venafi.vcert.sdk.endpoint.Authentication;
import com.venafi.vcert.sdk.endpoint.ConnectorType;
import org.apache.commons.codec.digest.DigestUtils;

import java.security.cert.CertificateEncodingException;
import java.security.cert.X509Certificate;
import java.util.Arrays;
import java.util.Collections;
public class TppClient {
public static void main(String... args) throws VCertException, CertificateEncodingException {
String tpp_user = System.getenv("TPP_USER");
String tpp_passwd = System.getenv("TPP_PASSWORD");
String url = System.getenv("VENAFI_URL");
String zone = System.getenv("VENAFI_ZONE");

public class TppClient
{
public static void main(String ... args) throws VCertException, CertificateEncodingException
{
String tpp_user = System.getenv("TPP_USER");
String tpp_passwd = System.getenv("TPP_PASSWORD");
String url = System.getenv("VENAFI_URL");
String zone = System.getenv("VENAFI_ZONE");
if (tpp_user == null)
tpp_user = "local:admin";
if (tpp_passwd == null)
tpp_passwd = "Passw0rd";
if (url == null)
url = "https://tpp.venafi.example/vedsdk";
if (zone == null)
zone = "Default";

if ( tpp_user == null ) tpp_user = "local:admin";
if ( tpp_passwd == null ) tpp_passwd = "Passw0rd";
if ( url == null ) url = "https://tpp.venafi.example/vedsdk";
if ( zone == null ) zone = "Default";
final Config config = Config.builder().connectorType(ConnectorType.TPP).baseUrl(url).build();

final Config config = Config.builder()
.connectorType(ConnectorType.TPP)
.baseUrl(url)
.build();
final VCertClient client = new VCertClient(config);

final VCertClient client = new VCertClient(config);
final Authentication auth =
Authentication.builder().user(tpp_user).password(tpp_passwd).build();

final Authentication auth = Authentication.builder()
.user(tpp_user)
.password(tpp_passwd)
.build();
client.authenticate(auth);

client.authenticate(auth);

final ZoneConfiguration zoneConfiguration = client.readZoneConfiguration(zone);
final ZoneConfiguration zoneConfiguration = client.readZoneConfiguration(zone);

// Generate a certificate
CertificateRequest certificateRequest = new CertificateRequest().subject(
new CertificateRequest.PKIXName()
.commonName("vcert-java.venafi.example")
.organization(Collections.singletonList("Venafi, Inc."))
.organizationalUnit(Arrays.asList("Product Management"))
.country(Collections.singletonList("US"))
.locality(Collections.singletonList("Salt Lake City"))
.province(Collections.singletonList("Utah")))
// Generate a certificate
CertificateRequest certificateRequest = new CertificateRequest()
.subject(new CertificateRequest.PKIXName().commonName("vcert-java.venafi.example")
.organization(Collections.singletonList("Venafi, Inc."))
.organizationalUnit(Arrays.asList("Product Management"))
.country(Collections.singletonList("US"))
.locality(Collections.singletonList("Salt Lake City"))
.province(Collections.singletonList("Utah")))

.keyType(KeyType.RSA)
.keyLength(2048);
.keyType(KeyType.RSA).keyLength(2048);

certificateRequest = client.generateRequest(zoneConfiguration, certificateRequest);
certificateRequest = client.generateRequest(zoneConfiguration, certificateRequest);

// Submit the certificate request
String newCertId = client.requestCertificate(certificateRequest, zone);
// Submit the certificate request
String newCertId = client.requestCertificate(certificateRequest, zone);

// Retrieve PEM collection from Venafi
final CertificateRequest pickupRequest = new CertificateRequest().pickupId(newCertId);
PEMCollection pemCollection = client.retrieveCertificate(pickupRequest);
System.out.println(pemCollection.certificate());
}
// Retrieve PEM collection from Venafi
final CertificateRequest pickupRequest = new CertificateRequest().pickupId(newCertId);
PEMCollection pemCollection = client.retrieveCertificate(pickupRequest);
System.out.println(pemCollection.certificate());
}
}
6 changes: 3 additions & 3 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
<modelVersion>4.0.0</modelVersion>

<groupId>com.venafi.vcert.sdk</groupId>
<artifactId>venafi-vcert-java</artifactId>
<version>1.0-SNAPSHOT</version>
<artifactId>vcert-java</artifactId>
<version>0.1.1</version>

<properties>
<lombok.version>1.18.6</lombok.version>
Expand Down Expand Up @@ -164,4 +164,4 @@
</repository>
</repositories>

</project>
</project>
154 changes: 78 additions & 76 deletions src/main/java/com/venafi/vcert/sdk/Config.java
Original file line number Diff line number Diff line change
@@ -1,101 +1,103 @@
package com.venafi.vcert.sdk;

import com.venafi.vcert.sdk.endpoint.Authentication;
import com.venafi.vcert.sdk.endpoint.ConnectorType;
import lombok.Builder;
import lombok.Data;
import org.ini4j.Profile;
import org.ini4j.Wini;

import static java.util.Arrays.asList;
import java.io.IOException;
import java.nio.file.Path;
import java.util.List;
import java.util.Objects;

import static java.util.Arrays.asList;
import org.ini4j.Profile;
import org.ini4j.Wini;
import lombok.Builder;
import lombok.Data;
import com.venafi.vcert.sdk.endpoint.Authentication;
import com.venafi.vcert.sdk.endpoint.ConnectorType;

@Data
@Builder
public class Config {
public static final String DEFAULT_SECTION = "?";
public static final List<String> VALID_TPP_KEYS =
asList("tpp_url", "tpp_user", "tpp_password", "tpp_zone", "trust_bundle");
public static final String DEFAULT_SECTION = "?";
public static final List<String> VALID_TPP_KEYS =
asList("tpp_url", "tpp_user", "tpp_password", "tpp_zone", "trust_bundle");

public static final List<String> VALID_CLOUD_KEYS =
asList("cloud_url", "cloud_apikey", "cloud_zone", "trust_bundle");
public static final List<String> VALID_CLOUD_KEYS =
asList("cloud_url", "cloud_apikey", "cloud_zone", "trust_bundle");

private ConnectorType connectorType;
private String baseUrl;
private String zone;
private Authentication credentials;
private String connectionTrust;
private boolean logVerbose;
private String configFile;
private String configSection;
private ConnectorType connectorType;
private String baseUrl;
private String zone;
private Authentication credentials;
private String connectionTrust;
private boolean logVerbose;
private String configFile;
private String configSection;


public static Config loadConfigFromFile(Path path) throws VCertException {
final ConfigBuilder builder = Config.builder();
final Authentication.AuthenticationBuilder authBuilder = Authentication.builder();
public static Config loadConfigFromFile(Path path) throws VCertException {
final ConfigBuilder builder = Config.builder();
final Authentication.AuthenticationBuilder authBuilder = Authentication.builder();

try {
final Wini ini = new Wini(path.toFile());
final Profile.Section defaultSection = ini.get(DEFAULT_SECTION);
validateConfigFile(defaultSection);
try {
final Wini ini = new Wini(path.toFile());
final Profile.Section defaultSection = ini.get(DEFAULT_SECTION);
validateConfigFile(defaultSection);

if (defaultSection.containsKey("tpp_url")) {
builder.connectorType(ConnectorType.TPP);
builder.baseUrl(defaultSection.get("tpp_url"));
authBuilder.user(defaultSection.get("tpp_user"));
authBuilder.password(defaultSection.get("tpp_password"));
if (defaultSection.containsKey("tpp_url")) {
builder.connectorType(ConnectorType.TPP);
builder.baseUrl(defaultSection.get("tpp_url"));
authBuilder.user(defaultSection.get("tpp_user"));
authBuilder.password(defaultSection.get("tpp_password"));

if (defaultSection.containsKey("tpp_zone")) {
builder.zone(defaultSection.get("tpp_zone"));
}
} else if (defaultSection.containsKey("cloud_apikey")) {
authBuilder.apiKey(defaultSection.get("cloud_apikey"));
if (defaultSection.containsKey("cloud_url")) {
builder.baseUrl(defaultSection.get("cloud_url"));
}
if (defaultSection.containsKey("cloud_zone")) {
builder.zone(defaultSection.get("cloud_zone"));
}
}
builder.credentials(authBuilder.build());
return builder.build();
} catch (IOException e) {
throw new VCertException(String.format("Access error to the configuration file: %s", path.toString()));
if (defaultSection.containsKey("tpp_zone")) {
builder.zone(defaultSection.get("tpp_zone"));
}
} else if (defaultSection.containsKey("cloud_apikey")) {
authBuilder.apiKey(defaultSection.get("cloud_apikey"));
if (defaultSection.containsKey("cloud_url")) {
builder.baseUrl(defaultSection.get("cloud_url"));
}
if (defaultSection.containsKey("cloud_zone")) {
builder.zone(defaultSection.get("cloud_zone"));
}
}
builder.credentials(authBuilder.build());
return builder.build();
} catch (IOException e) {
throw new VCertException(
String.format("Access error to the configuration file: %s", path.toString()));
}
}

private static void validateConfigFile(Profile.Section defaultSection) throws VCertException {
if (Objects.isNull(defaultSection)) {
throw new VCertException("The configuration file is empty");
}
private static void validateConfigFile(Profile.Section defaultSection) throws VCertException {
if (Objects.isNull(defaultSection)) {
throw new VCertException("The configuration file is empty");
}

if (defaultSection.containsKey("tpp_url")) {
for (String key : defaultSection.keySet()) {
if (!VALID_TPP_KEYS.contains(key)) {
throw new VCertException(String.format("illegal key %s in section %s", key, defaultSection.getName()));
}
}
if (!defaultSection.containsKey("tpp_user")) {
throw new VCertException(String.format("configuration issue section %s: missing TTP user",
defaultSection.getName()));
}
if (!defaultSection.containsKey("tpp_password")) {
throw new VCertException(String.format("configuration issue section %s: missing TTP password",
defaultSection.getName()));
}
} else if (defaultSection.containsKey("cloud_apikey")){
for (String key : defaultSection.keySet()) {
if (!VALID_CLOUD_KEYS.contains(key)) {
throw new VCertException(String.format("illegal key %s in section %s", key, defaultSection.getName()));
}
}
} else {
throw new VCertException(String.format("Section %s requires 'tpp_url' or 'cloud_apikey'", defaultSection.getName()));
if (defaultSection.containsKey("tpp_url")) {
for (String key : defaultSection.keySet()) {
if (!VALID_TPP_KEYS.contains(key)) {
throw new VCertException(
String.format("illegal key %s in section %s", key, defaultSection.getName()));
}
}
if (!defaultSection.containsKey("tpp_user")) {
throw new VCertException(String.format("configuration issue section %s: missing TPP user",
defaultSection.getName()));
}
if (!defaultSection.containsKey("tpp_password")) {
throw new VCertException(String.format(
"configuration issue section %s: missing TPP password", defaultSection.getName()));
}
} else if (defaultSection.containsKey("cloud_apikey")) {
for (String key : defaultSection.keySet()) {
if (!VALID_CLOUD_KEYS.contains(key)) {
throw new VCertException(
String.format("illegal key %s in section %s", key, defaultSection.getName()));
}
}
} else {
throw new VCertException(String.format("Section %s requires 'tpp_url' or 'cloud_apikey'",
defaultSection.getName()));
}
}

}
52 changes: 27 additions & 25 deletions src/main/java/com/venafi/vcert/sdk/SignatureAlgorithm.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,31 +4,33 @@

public enum SignatureAlgorithm {

UnknownSignatureAlgorithm(""),
MD2withRSA("MD2withRSA"),
MD5WithRSA("MD5withRSA"),
SHA1WithRSA("SHA1withRSA"),
SHA256WithRSA("SHA256withRSA"),
SHA384WithRSA("SHA384withRSA"),
SHA512WithRSA("SHA512withRSA"),
DSAWithSHA1("SHA1withDSA"),
DSAWithSHA256("SHA256withDSA"),
ECDSAWithSHA1("SHA1withECDSA"),
ECDSAWithSHA256("SHA256withECDSA"),
ECDSAWithSHA384("SHA384withECDSA"),
ECDSAWithSHA512("SHA512withECDSA"),
SHA256WithRSAPSS("RSAPSSwithSHA256"),
SHA384WithRSAPSS("RSAPSSwithSHA384"),
SHA512WithRSAPSS("RSAPSSwithSHA512");
UnknownSignatureAlgorithm(""),
MD2withRSA("MD2withRSA"),
MD5WithRSA("MD5withRSA"),
SHA1WithRSA("SHA1withRSA"),
SHA256WithRSA("SHA256withRSA"),
SHA384WithRSA("SHA384withRSA"),
SHA512WithRSA("SHA512withRSA"),
DSAWithSHA1("SHA1withDSA"),
DSAWithSHA256("SHA256withDSA"),
ECDSAWithSHA1("SHA1withECDSA"),
ECDSAWithSHA256("SHA256withECDSA"),
ECDSAWithSHA384("SHA384withECDSA"),
ECDSAWithSHA512("SHA512withECDSA"),
SHA256WithRSAPSS("RSAPSSwithSHA256"),
SHA384WithRSAPSS("RSAPSSwithSHA384"),
SHA512WithRSAPSS("RSAPSSwithSHA512");

/**
* @param standardName
* @see <a href="https://docs.oracle.com/javase/9/docs/specs/security/standard-names.html#signature-algorithms">Standard Signature Algorithm Names</a>
*/
SignatureAlgorithm(String standardName) {
this.standardName = standardName;
}
/**
* @param standardName
* @see <a href=
* "https://docs.oracle.com/javase/9/docs/specs/security/standard-names.html#signature-algorithms">Standard
* Signature Algorithm Names</a>
*/
SignatureAlgorithm(String standardName) {
this.standardName = standardName;
}

@Getter
private String standardName;
@Getter
private String standardName;
}
Loading