Skip to content
This repository was archived by the owner on Jun 5, 2025. It is now read-only.

Commit 8d7542a

Browse files
achuchevstkomitov
andauthored
Updates to support current Venafi Cloud API (#6)
* Updates: - The latest Cloud API is used. Cloud zone can be specified as ID or name (e.g. ProjectName\ProjectZone). - Support for proxy with or without authentication. - Vendor name and version can be sent Venafi Trust Protection Platform. * Code review comment applied: - Use "APIKEY" environment variable instead of "TOKEN" when Venafi Cloud is used. * Setting Feign to version 10.4.0 (previously 10.5.0) to support Java 8. * Include all tests * Code review comments applied: - Fix the broken backward compatibility (requestCertificate() method) - Cleanup of the examples * Rename productNameAndVersion to appInfo (consistent with GO implementation). Add "Venafi VCert-Java" as a default value of Origin (if not provided by appInfo). Co-authored-by: Atanas Chuchev <atanas.chuchev@venafi.com> Co-authored-by: Stanimir Komitov <stanimir.komitov@venafi.com>
1 parent f89b24e commit 8d7542a

37 files changed

Lines changed: 1045 additions & 335 deletions

README.md

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -78,10 +78,10 @@ ZoneConfiguration zoneConfiguration = client.readZoneConfiguration("Certificates
7878
certificateRequest = client.generateRequest(zoneConfiguration, certificateRequest);
7979
8080
// Submit the certificate request
81-
client.requestCertificate(certificateRequest, "Certificates\\VCert");
81+
client.requestCertificate(certificateRequest, zoneConfiguration);
8282
8383
// Retrieve PEM collection from Venafi
84-
PEMCollection pemCollection = client.retrieveCertificate(certificateRequest);
84+
pemCollection = client.retrieveCertificate(certificateRequest);
8585
8686
System.out.println(pemCollection.pemPrivateKey());
8787
System.out.println(pemCollection.pemCertificate());
@@ -117,7 +117,7 @@ certificateRequest = new CertificateRequest().csr(csr.getBytes())
117117
.emailAddresses(Arrays.asList("larry@venafi.example", "moe@venafi.example", "curly@venafi.example"));
118118
119119
// Submit the certificate request
120-
client.requestCertificate(certificateRequest, "Certificates\\VCert");
120+
client.requestCertificate(certificateRequest, zoneConfiguration);
121121
122122
// Retrieve PEM collection from Venafi
123123
pemCollection = client.retrieveCertificate(certificateRequest);
@@ -149,13 +149,13 @@ To run the acceptance tests the following environment variables must be set:
149149

150150
| NAME | NOTES |
151151
|------|-------|
152-
| VENAFI_USER | Only for TPP connector tests |
153-
| VENAFI_PASSWORD | Only for TPP connector tests |
154-
| VENAFI_TPP_URL | Only for TPP connector tests |
155-
| VENAFI_API_KEY | Taken from account after logged into TPP |
156-
| VENAFI_CERT_COMMON_NAME | Used for cert creation, should match configured domains |
157-
| VENAFI_CLOUD_URL | Only for cloud connector tests |
158-
| VENAFI_ZONE | Policy folder for TPP |
152+
| TPPURL | Only for TPP connector tests |
153+
| TPPUSER | Only for TPP connector tests |
154+
| TPPPASSWORD | Only for TPP connector tests |
155+
| TPPZONE | Policy folder for TPP |
156+
| CLOUDURL | Only for Venafi Cloud connector tests |
157+
| APIKEY | Taken from account after logged into Venafi Cloud |
158+
| CLOUDZONE | Zone ID or ProjectName\ZoneName for Venafi Cloud |
159159

160160
Acceptance test are executed with:
161161
```
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package com.venafi.vcert.sdk.example;
2+
3+
import java.security.KeyManagementException;
4+
import java.security.NoSuchAlgorithmException;
5+
import java.security.cert.CertificateEncodingException;
6+
import java.util.Arrays;
7+
import java.util.Collections;
8+
import com.venafi.vcert.sdk.Config;
9+
import com.venafi.vcert.sdk.VCertClient;
10+
import com.venafi.vcert.sdk.VCertException;
11+
import com.venafi.vcert.sdk.certificate.CertificateRequest;
12+
import com.venafi.vcert.sdk.certificate.KeyType;
13+
import com.venafi.vcert.sdk.certificate.PEMCollection;
14+
import com.venafi.vcert.sdk.connectors.tpp.ZoneConfiguration;
15+
import com.venafi.vcert.sdk.endpoint.Authentication;
16+
import com.venafi.vcert.sdk.endpoint.ConnectorType;
17+
18+
public class CloudClient {
19+
public static void main(String[] args) throws VCertException, CertificateEncodingException,
20+
NoSuchAlgorithmException, KeyManagementException {
21+
String url = System.getenv("CLOUDURL");
22+
String zone = System.getenv("CLOUDZONE");
23+
String appInfo = System.getenv("PRODUCT");
24+
String apiKey = System.getenv("APIKEY");
25+
26+
if (zone == null) {
27+
zone = "My Project\\My Zone"; // or by ID "38992cc0-0177-11ea-a3f0-2b5db8116980";
28+
}
29+
if (appInfo == null)
30+
appInfo = "My Application 1.0.0.0";
31+
if (apiKey == null)
32+
apiKey = "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee";
33+
34+
Config config = Config.builder().connectorType(ConnectorType.CLOUD).baseUrl(url).appInfo(appInfo)
35+
// To use proxy uncomment the lines below
36+
// .proxy(new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 8888)))
37+
// .proxyUser("myUser")
38+
// .proxyPassword("myPasscode")
39+
.build();
40+
41+
Authentication auth = Authentication.builder().apiKey(apiKey).build();
42+
43+
VCertClient client = new VCertClient(config);
44+
client.authenticate(auth);
45+
46+
ZoneConfiguration zoneConfiguration = client.readZoneConfiguration(zone);
47+
48+
// Generate a certificate
49+
CertificateRequest certificateRequest = new CertificateRequest()
50+
.subject(new CertificateRequest.PKIXName().commonName("vcert-java.venafi.example")
51+
.organization(Collections.singletonList("Venafi, Inc."))
52+
.organizationalUnit(Arrays.asList("Product Management"))
53+
.country(Collections.singletonList("US"))
54+
.locality(Collections.singletonList("Salt Lake City"))
55+
.province(Collections.singletonList("Utah")))
56+
.keyType(KeyType.RSA).keyLength(2048);
57+
58+
certificateRequest = client.generateRequest(zoneConfiguration, certificateRequest);
59+
60+
// Submit the certificate request
61+
client.requestCertificate(certificateRequest, zoneConfiguration);
62+
63+
// Retrieve PEM collection from Venafi
64+
PEMCollection pemCollection = client.retrieveCertificate(certificateRequest);
65+
System.out.println(pemCollection.certificate());
66+
}
67+
}

examples/TppClient.java renamed to examples/com/venafi/vcert/sdk/example/TppClient.java

Lines changed: 28 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
package com.venafi.vcert.sdk.example;
2+
3+
import java.security.KeyManagementException;
4+
import java.security.NoSuchAlgorithmException;
15
import java.security.cert.CertificateEncodingException;
26
import java.util.Arrays;
37
import java.util.Collections;
@@ -12,31 +16,40 @@
1216
import com.venafi.vcert.sdk.endpoint.ConnectorType;
1317

1418
public class TppClient {
15-
public static void main(String... args) throws VCertException, CertificateEncodingException {
16-
String tpp_user = System.getenv("TPP_USER");
17-
String tpp_passwd = System.getenv("TPP_PASSWORD");
18-
String url = System.getenv("VENAFI_URL");
19-
String zone = System.getenv("VENAFI_ZONE");
19+
public static void main(String[] args) throws VCertException, CertificateEncodingException,
20+
NoSuchAlgorithmException, KeyManagementException {
21+
22+
String url = System.getenv("TPPURL");
23+
String zone = System.getenv("TPPZONE");
24+
String appInfo = System.getenv("PRODUCT");
25+
String tpp_user = System.getenv("TPPUSER");
26+
String tpp_passwd = System.getenv("TPPPASSWORD");
2027

2128
if (tpp_user == null)
2229
tpp_user = "local:admin";
2330
if (tpp_passwd == null)
24-
tpp_passwd = "Passw0rd";
31+
tpp_passwd = "password";
2532
if (url == null)
2633
url = "https://tpp.venafi.example/vedsdk";
2734
if (zone == null)
28-
zone = "Default";
35+
zone = "Certificates\\vcert\\";
36+
if (appInfo == null)
37+
appInfo = "My Application 1.0.0.0";
2938

30-
final Config config = Config.builder().connectorType(ConnectorType.TPP).baseUrl(url).build();
39+
// Configuration
40+
Config config = Config.builder().connectorType(ConnectorType.TPP).baseUrl(url).appInfo(appInfo)
41+
// To use proxy uncomment the lines below
42+
// .proxy(new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 8888)))
43+
// .proxyUser("myUser")
44+
// .proxyPassword("myPasscode")
45+
.build();
3146

32-
final VCertClient client = new VCertClient(config);
33-
34-
final Authentication auth =
35-
Authentication.builder().user(tpp_user).password(tpp_passwd).build();
47+
Authentication auth = Authentication.builder().user(tpp_user).password(tpp_passwd).build();
3648

49+
VCertClient client = new VCertClient(config);
3750
client.authenticate(auth);
3851

39-
final ZoneConfiguration zoneConfiguration = client.readZoneConfiguration(zone);
52+
ZoneConfiguration zoneConfiguration = client.readZoneConfiguration(zone);
4053

4154
// Generate a certificate
4255
CertificateRequest certificateRequest = new CertificateRequest()
@@ -46,17 +59,15 @@ public static void main(String... args) throws VCertException, CertificateEncodi
4659
.country(Collections.singletonList("US"))
4760
.locality(Collections.singletonList("Salt Lake City"))
4861
.province(Collections.singletonList("Utah")))
49-
5062
.keyType(KeyType.RSA).keyLength(2048);
5163

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

5466
// Submit the certificate request
55-
String newCertId = client.requestCertificate(certificateRequest, zone);
67+
client.requestCertificate(certificateRequest, zoneConfiguration);
5668

5769
// Retrieve PEM collection from Venafi
58-
final CertificateRequest pickupRequest = new CertificateRequest().pickupId(newCertId);
59-
PEMCollection pemCollection = client.retrieveCertificate(pickupRequest);
70+
PEMCollection pemCollection = client.retrieveCertificate(certificateRequest);
6071
System.out.println(pemCollection.certificate());
6172
}
6273
}

pom.xml

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,12 @@
66

77
<groupId>com.venafi.vcert.sdk</groupId>
88
<artifactId>vcert-java</artifactId>
9-
<version>0.1.1</version>
9+
<version>0.1.2</version>
1010

1111
<properties>
1212
<lombok.version>1.18.6</lombok.version>
1313
<bouncycastle.version>1.61</bouncycastle.version>
14-
<feign.version>10.2.0</feign.version>
14+
<feign.version>10.4.0</feign.version>
1515
<guava.version>23.0</guava.version>
1616
<log4j.version>2.11.2</log4j.version>
1717
<junit.version>5.3.1</junit.version>
@@ -139,20 +139,13 @@
139139
<groupId>org.apache.maven.plugins</groupId>
140140
<artifactId>maven-surefire-plugin</artifactId>
141141
<version>3.0.0-M3</version>
142-
<executions>
143-
<execution>
144-
<id>integration-test</id>
145-
<goals>
146-
<goal>test</goal>
147-
</goals>
148-
<phase>integration-test</phase>
149-
<configuration>
150-
<includes>
151-
<include>**/*IT.java</include>
152-
</includes>
153-
</configuration>
154-
</execution>
155-
</executions>
142+
<configuration>
143+
<includes>
144+
<include>**/*IT.java</include>
145+
<include>**/*AT.java</include>
146+
<include>**/*Test</include>
147+
</includes>
148+
</configuration>
156149
</plugin>
157150
</plugins>
158151
</build>
@@ -164,4 +157,4 @@
164157
</repository>
165158
</repositories>
166159

167-
</project>
160+
</project>

src/main/java/com/venafi/vcert/sdk/Config.java

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,13 @@
22

33
import static java.util.Arrays.asList;
44
import java.io.IOException;
5+
import java.net.Proxy;
56
import java.nio.file.Path;
67
import java.util.List;
78
import java.util.Objects;
89
import org.ini4j.Profile;
910
import org.ini4j.Wini;
11+
import feign.Client;
1012
import lombok.Builder;
1113
import lombok.Data;
1214
import com.venafi.vcert.sdk.endpoint.Authentication;
@@ -16,20 +18,26 @@
1618
@Builder
1719
public class Config {
1820
public static final String DEFAULT_SECTION = "?";
19-
public static final List<String> VALID_TPP_KEYS =
20-
asList("tpp_url", "tpp_user", "tpp_password", "tpp_zone", "trust_bundle");
21+
public static final List<String> VALID_TPP_KEYS = asList("tpp_url", "tpp_user", "tpp_password",
22+
"tpp_zone", "trust_bundle", "app_info");
2123

22-
public static final List<String> VALID_CLOUD_KEYS =
23-
asList("cloud_url", "cloud_apikey", "cloud_zone", "trust_bundle");
24+
public static final List<String> VALID_CLOUD_KEYS = asList("cloud_url", "cloud_apikey",
25+
"cloud_zone", "trust_bundle", "cloud_project", "app_info");
2426

2527
private ConnectorType connectorType;
2628
private String baseUrl;
29+
private String project;
2730
private String zone;
2831
private Authentication credentials;
2932
private String connectionTrust;
3033
private boolean logVerbose;
3134
private String configFile;
3235
private String configSection;
36+
private String appInfo;
37+
private Proxy proxy;
38+
private String proxyUser;
39+
private String proxyPassword;
40+
private Client client;
3341

3442

3543
public static Config loadConfigFromFile(Path path) throws VCertException {
@@ -55,10 +63,20 @@ public static Config loadConfigFromFile(Path path) throws VCertException {
5563
if (defaultSection.containsKey("cloud_url")) {
5664
builder.baseUrl(defaultSection.get("cloud_url"));
5765
}
66+
5867
if (defaultSection.containsKey("cloud_zone")) {
5968
builder.zone(defaultSection.get("cloud_zone"));
6069
}
70+
71+
if (defaultSection.containsKey("cloud_project")) {
72+
builder.project(defaultSection.get("cloud_project"));
73+
}
6174
}
75+
76+
if (defaultSection.containsKey("app_info")) {
77+
builder.appInfo(defaultSection.get("app_info"));
78+
}
79+
6280
builder.credentials(authBuilder.build());
6381
return builder.build();
6482
} catch (IOException e) {
@@ -99,5 +117,4 @@ private static void validateConfigFile(Profile.Section defaultSection) throws VC
99117
defaultSection.getName()));
100118
}
101119
}
102-
103120
}

0 commit comments

Comments
 (0)