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

Zone config reading triggers NullPointerException due to Venafi Cloud API renaming "keyTypes" to "keyTypesMap" #24

@FooBarWidget

Description

@FooBarWidget

PROBLEM SUMMARY
When reading zone config Venafi Cloud, vcert-java throws a NullPointerException with this stack trace:

Exception in thread "main" java.lang.NullPointerException
        at com.venafi.vcert.sdk.connectors.cloud.domain.CertificateIssuingTemplate.toPolicy(CertificateIssuingTemplate.java:69)
        at com.venafi.vcert.sdk.connectors.cloud.CloudConnector.readZoneConfiguration(CloudConnector.java:159)
        at com.venafi.vcert.sdk.VCertClient.readZoneConfiguration(VCertClient.java:127)

STEPS TO REPRODUCE

import com.venafi.vcert.sdk.Config;
import com.venafi.vcert.sdk.VCertClient;
import com.venafi.vcert.sdk.VCertException;
import com.venafi.vcert.sdk.endpoint.Authentication;
import com.venafi.vcert.sdk.endpoint.ConnectorType;

public class ZoneErrorTest {
    public static final String API_KEY = "[redacted]";
    public static final String ZONE = "98f564f0-5e13-11ea-993a-7b095c006e5d";

    public static void main(String[] args) throws Exception {
        new ZoneErrorTest().run();
    }

    public void run() throws Exception {
        VCertClient client = createClient();
        client.readZoneConfiguration(ZONE);
    }

    private VCertClient createClient() throws VCertException {
        Config sdkConfig = Config.builder()
            .connectorType(ConnectorType.CLOUD)
            .build();
        Authentication sdkAuth = Authentication.builder()
            .apiKey(API_KEY)
            .build();
        VCertClient client = new VCertClient(sdkConfig);
        client.authenticate(sdkAuth);
        return client;
    }
}

EXPECTED RESULTS
No exception occurs.

ACTUAL RESULTS

14:52:41.906 [main] DEBUG feign.Logger - [Cloud#authorize] ---> GET https://api.venafi.cloud/v1/useraccounts HTTP/1.1
14:52:42.662 [main] DEBUG feign.Logger - [Cloud#authorize] <--- HTTP/1.1 200 OK (746ms)
14:52:42.698 [main] DEBUG feign.Logger - [Cloud#projects] ---> GET https://api.venafi.cloud/v1/devopsprojects?zoneDetails=true HTTP/1.1
14:52:42.984 [main] DEBUG feign.Logger - [Cloud#projects] <--- HTTP/1.1 200 OK (285ms)
Exception in thread "main" java.lang.NullPointerException
        at com.venafi.vcert.sdk.connectors.cloud.domain.CertificateIssuingTemplate.toPolicy(CertificateIssuingTemplate.java:69)
        at com.venafi.vcert.sdk.connectors.cloud.CloudConnector.readZoneConfiguration(CloudConnector.java:159)
        at com.venafi.vcert.sdk.VCertClient.readZoneConfiguration(VCertClient.java:127)
        at FailTest.run(FailTest.java:27)
        at ZoneErrorTest.main(ZoneErrorTest.java:12)

ENVIRONMENT DETAILS
Commit 361e641, macOS Catalina, Java 11 (via AdoptOpenJDK, Hotspot).

COMMENTS/WORKAROUNDS
CertificateIssueingTemplate.toPolicy() calls:

List<AllowedKeyConfiguration> allowedKeyConfigurations = keyTypes.stream()

Here, keyTypes is null.

The reason why keyTypes is null is because the API response contains "keyTypesMap", not "keyTypes":

http "https://api.venafi.cloud/v1/devopsprojects?zoneDetails=true" "tppl-api-key:[redacted]"
{
    "devopsProjects": [
        {
            ...
            "zones": [
                {
                    "cit": {
                        ...
                        "keyReuse": true,
                        "keyTypesMap": {
                            "RSA": [
                                2048,
                                4096
                            ]
                        },
                        ...
                    },
                    ...
                },
                ...
            ]
        }
    ]
}

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions