/*
 * Copyright (c) 2011-2017 Contributors to the Eclipse Foundation
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License 2.0 which is available at
 * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
 * which is available at https://www.apache.org/licenses/LICENSE-2.0.
 *
 * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
 */

package io.vertx.core.net;

import io.vertx.codegen.annotations.DataObject;
import io.vertx.codegen.annotations.GenIgnore;
import io.vertx.core.buffer.Buffer;
import io.vertx.core.impl.Arguments;
import io.vertx.core.json.JsonObject;

import java.util.ArrayList;
import java.util.List;

Key store options configuring a list of private key and its certificate based on Privacy-enhanced Electronic Email (PEM) files.

A key file must contain a non encrypted private key in PKCS8 format wrapped in a PEM block, for example:

-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDV6zPk5WqLwS0a
...
K5xBhtm1AhdnZjx5KfW3BecE
-----END PRIVATE KEY-----

Or contain a non encrypted private key in PKCS1 format wrapped in a PEM block, for example:

-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAlO4gbHeFb/fmbUF/tOJfNPJumJUEqgzAzx8MBXv9Acyw9IRa
...
zJ14Yd+t2fsLYVs2H0gxaA4DW6neCzgY3eKpSU0EBHUCFSXp/1+/
-----END RSA PRIVATE KEY-----

A certificate file must contain an X.509 certificate wrapped in a PEM block, for example:

-----BEGIN CERTIFICATE-----
MIIDezCCAmOgAwIBAgIEZOI/3TANBgkqhkiG9w0BAQsFADBuMRAwDgYDVQQGEwdV
...
+tmLSvYS39O2nqIzzAUfztkYnUlZmB0l/mKkVqbGJA==
-----END CERTIFICATE-----
Keys and certificates can either be loaded by Vert.x from the filesystem:

HttpServerOptions options = new HttpServerOptions();
options.setPemKeyCertOptions(new PemKeyCertOptions().setKeyPath("/mykey.pem").setCertPath("/mycert.pem"));
Or directly provided as a buffer:

Buffer key = vertx.fileSystem().readFileSync("/mykey.pem");
Buffer cert = vertx.fileSystem().readFileSync("/mycert.pem");
options.setPemKeyCertOptions(new PemKeyCertOptions().setKeyValue(key).setCertValue(cert));
Several key/certificate pairs can be used:

HttpServerOptions options = new HttpServerOptions();
options.setPemKeyCertOptions(new PemKeyCertOptions()
   .addKeyPath("/mykey1.pem").addCertPath("/mycert1.pem")
   .addKeyPath("/mykey2.pem").addCertPath("/mycert2.pem"));
Author:Julien Viet, Tim Fox
/** * Key store options configuring a list of private key and its certificate based on * <i>Privacy-enhanced Electronic Email</i> (PEM) files. * <p> * * A key file must contain a <b>non encrypted</b> private key in <b>PKCS8</b> format wrapped in a PEM * block, for example: * <p> * * <pre> * -----BEGIN PRIVATE KEY----- * MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDV6zPk5WqLwS0a * ... * K5xBhtm1AhdnZjx5KfW3BecE * -----END PRIVATE KEY----- * </pre><p> * * Or contain a <b>non encrypted</b> private key in <b>PKCS1</b> format wrapped in a PEM * block, for example: * <p> * * <pre> * -----BEGIN RSA PRIVATE KEY----- * MIIEowIBAAKCAQEAlO4gbHeFb/fmbUF/tOJfNPJumJUEqgzAzx8MBXv9Acyw9IRa * ... * zJ14Yd+t2fsLYVs2H0gxaA4DW6neCzgY3eKpSU0EBHUCFSXp/1+/ * -----END RSA PRIVATE KEY----- * </pre><p> * * A certificate file must contain an X.509 certificate wrapped in a PEM block, for example: * <p> * * <pre> * -----BEGIN CERTIFICATE----- * MIIDezCCAmOgAwIBAgIEZOI/3TANBgkqhkiG9w0BAQsFADBuMRAwDgYDVQQGEwdV * ... * +tmLSvYS39O2nqIzzAUfztkYnUlZmB0l/mKkVqbGJA== * -----END CERTIFICATE----- * </pre> * * Keys and certificates can either be loaded by Vert.x from the filesystem: * <p> * <pre> * HttpServerOptions options = new HttpServerOptions(); * options.setPemKeyCertOptions(new PemKeyCertOptions().setKeyPath("/mykey.pem").setCertPath("/mycert.pem")); * </pre> * * Or directly provided as a buffer:<p> * * <pre> * Buffer key = vertx.fileSystem().readFileSync("/mykey.pem"); * Buffer cert = vertx.fileSystem().readFileSync("/mycert.pem"); * options.setPemKeyCertOptions(new PemKeyCertOptions().setKeyValue(key).setCertValue(cert)); * </pre> * * Several key/certificate pairs can be used: * <p> * <pre> * HttpServerOptions options = new HttpServerOptions(); * options.setPemKeyCertOptions(new PemKeyCertOptions() * .addKeyPath("/mykey1.pem").addCertPath("/mycert1.pem") * .addKeyPath("/mykey2.pem").addCertPath("/mycert2.pem")); * </pre> * * @author <a href="mailto:julien@julienviet.com">Julien Viet</a> * @author <a href="http://tfox.org">Tim Fox</a> */
@DataObject(generateConverter = true, publicConverter = false) public class PemKeyCertOptions implements KeyCertOptions, Cloneable { private List<String> keyPaths; private List<Buffer> keyValues; private List<String> certPaths; private List<Buffer> certValues;
Default constructor
/** * Default constructor */
public PemKeyCertOptions() { super(); init(); } private void init() { keyPaths = new ArrayList<>(); keyValues = new ArrayList<>(); certPaths = new ArrayList<>(); certValues = new ArrayList<>(); }
Copy constructor
Params:
  • other – the options to copy
/** * Copy constructor * * @param other the options to copy */
public PemKeyCertOptions(PemKeyCertOptions other) { super(); this.keyPaths = other.keyPaths != null ? new ArrayList<>(other.keyPaths) : new ArrayList<>(); this.keyValues = other.keyValues != null ? new ArrayList<>(other.keyValues) : new ArrayList<>(); this.certPaths = other.certPaths != null ? new ArrayList<>(other.certPaths) : new ArrayList<>(); this.certValues = other.certValues != null ? new ArrayList<>(other.certValues) : new ArrayList<>(); }
Create options from JSON
Params:
  • json – the JSON
/** * Create options from JSON * * @param json the JSON */
public PemKeyCertOptions(JsonObject json) { super(); init(); PemKeyCertOptionsConverter.fromJson(json, this); }
Convert to JSON
Returns:the JSON
/** * Convert to JSON * * @return the JSON */
public JsonObject toJson() { JsonObject json = new JsonObject(); PemKeyCertOptionsConverter.toJson(this, json); return json; }
Get the path to the first key file
Returns:the path to the key file
/** * Get the path to the first key file * * @return the path to the key file */
@GenIgnore public String getKeyPath() { return keyPaths.isEmpty() ? null : keyPaths.get(0); }
Set the path of the first key file, replacing the keys paths
Params:
  • keyPath – the path to the first key file
Returns:a reference to this, so the API can be used fluently
/** * Set the path of the first key file, replacing the keys paths * * @param keyPath the path to the first key file * @return a reference to this, so the API can be used fluently */
public PemKeyCertOptions setKeyPath(String keyPath) { keyPaths.clear(); if (keyPath != null) { keyPaths.add(keyPath); } return this; }
Get all the paths to the key files
Returns:the paths to the keys files
/** * Get all the paths to the key files * * @return the paths to the keys files */
public List<String> getKeyPaths() { return keyPaths; }
Set all the paths to the keys files
Params:
  • keyPaths – the paths to the keys files
Returns:a reference to this, so the API can be used fluently
/** * Set all the paths to the keys files * * @param keyPaths the paths to the keys files * @return a reference to this, so the API can be used fluently */
public PemKeyCertOptions setKeyPaths(List<String> keyPaths) { this.keyPaths.clear(); this.keyPaths.addAll(keyPaths); return this; }
Add a path to a key file
Params:
  • keyPath – the path to the key file
Returns:a reference to this, so the API can be used fluently
/** * Add a path to a key file * * @param keyPath the path to the key file * @return a reference to this, so the API can be used fluently */
@GenIgnore public PemKeyCertOptions addKeyPath(String keyPath) { Arguments.require(keyPath != null, "Null keyPath"); keyPaths.add(keyPath); return this; }
Get the first key as a buffer
Returns: the first key as a buffer
/** * Get the first key as a buffer * * @return the first key as a buffer */
@GenIgnore public Buffer getKeyValue() { return keyValues.isEmpty() ? null : keyValues.get(0); }
Set the first key a a buffer, replacing the previous keys buffers
Params:
  • keyValue – key as a buffer
Returns:a reference to this, so the API can be used fluently
/** * Set the first key a a buffer, replacing the previous keys buffers * * @param keyValue key as a buffer * @return a reference to this, so the API can be used fluently */
public PemKeyCertOptions setKeyValue(Buffer keyValue) { keyValues.clear(); if (keyValue != null) { keyValues.add(keyValue); } return this; }
Get all the keys as a list of buffer
Returns: keys as a list of buffers
/** * Get all the keys as a list of buffer * * @return keys as a list of buffers */
public List<Buffer> getKeyValues() { return keyValues; }
Set all the keys as a list of buffer
Params:
  • keyValues – the keys as a list of buffer
Returns:a reference to this, so the API can be used fluently
/** * Set all the keys as a list of buffer * * @param keyValues the keys as a list of buffer * @return a reference to this, so the API can be used fluently */
public PemKeyCertOptions setKeyValues(List<Buffer> keyValues) { this.keyValues.clear(); this.keyValues.addAll(keyValues); return this; }
Add a key as a buffer
Params:
  • keyValue – the key to add
Returns:a reference to this, so the API can be used fluently
/** * Add a key as a buffer * * @param keyValue the key to add * @return a reference to this, so the API can be used fluently */
@GenIgnore public PemKeyCertOptions addKeyValue(Buffer keyValue) { Arguments.require(keyValue != null, "Null keyValue"); keyValues.add(keyValue); return this; }
Get the path to the first certificate file
Returns: the path to the certificate file
/** * Get the path to the first certificate file * * @return the path to the certificate file */
@GenIgnore public String getCertPath() { return certPaths.isEmpty() ? null : certPaths.get(0); }
Set the path of the first certificate, replacing the previous certificates paths
Params:
  • certPath – the path to the certificate
Returns:a reference to this, so the API can be used fluently
/** * Set the path of the first certificate, replacing the previous certificates paths * * @param certPath the path to the certificate * @return a reference to this, so the API can be used fluently */
public PemKeyCertOptions setCertPath(String certPath) { certPaths.clear(); if (certPath != null) { certPaths.add(certPath); } return this; }
Get all the paths to the certificates files
Returns:the paths to the certificates files
/** * Get all the paths to the certificates files * * @return the paths to the certificates files */
public List<String> getCertPaths() { return certPaths; }
Set all the paths to the certificates files
Params:
  • certPaths – the paths to the certificates files
Returns:a reference to this, so the API can be used fluently
/** * Set all the paths to the certificates files * * @param certPaths the paths to the certificates files * @return a reference to this, so the API can be used fluently */
public PemKeyCertOptions setCertPaths(List<String> certPaths) { this.certPaths.clear(); this.certPaths.addAll(certPaths); return this; }
Add a path to a certificate file
Params:
  • certPath – the path to the certificate file
Returns:a reference to this, so the API can be used fluently
/** * Add a path to a certificate file * * @param certPath the path to the certificate file * @return a reference to this, so the API can be used fluently */
@GenIgnore public PemKeyCertOptions addCertPath(String certPath) { Arguments.require(certPath != null, "Null certPath"); certPaths.add(certPath); return this; }
Get the first certificate as a buffer
Returns: the first certificate as a buffer
/** * Get the first certificate as a buffer * * @return the first certificate as a buffer */
@GenIgnore public Buffer getCertValue() { return certValues.isEmpty() ? null : certValues.get(0); }
Set the first certificate as a buffer, replacing the previous certificates buffers
Params:
  • certValue – the first certificate as a buffer
Returns:a reference to this, so the API can be used fluently
/** * Set the first certificate as a buffer, replacing the previous certificates buffers * * @param certValue the first certificate as a buffer * @return a reference to this, so the API can be used fluently */
public PemKeyCertOptions setCertValue(Buffer certValue) { certValues.clear(); if (certValue != null) { certValues.add(certValue); } return this; }
Get all the certificates as a list of buffer
Returns: certificates as a list of buffers
/** * Get all the certificates as a list of buffer * * @return certificates as a list of buffers */
public List<Buffer> getCertValues() { return certValues; }
Set all the certificates as a list of buffer
Params:
  • certValues – the certificates as a list of buffer
Returns:a reference to this, so the API can be used fluently
/** * Set all the certificates as a list of buffer * * @param certValues the certificates as a list of buffer * @return a reference to this, so the API can be used fluently */
public PemKeyCertOptions setCertValues(List<Buffer> certValues) { this.certValues.clear(); this.certValues.addAll(certValues); return this; }
Add a certificate as a buffer
Params:
  • certValue – the certificate to add
Returns:a reference to this, so the API can be used fluently
/** * Add a certificate as a buffer * * @param certValue the certificate to add * @return a reference to this, so the API can be used fluently */
@GenIgnore public PemKeyCertOptions addCertValue(Buffer certValue) { Arguments.require(certValue != null, "Null certValue"); certValues.add(certValue); return this; } @Override public boolean equals(Object o) { if (this == o) { return true; } if (!(o instanceof PemKeyCertOptions)) { return false; } PemKeyCertOptions that = (PemKeyCertOptions) o; if (!keyPaths.equals(that.keyPaths)) { return false; } if (!keyValues.equals(that.keyValues)) { return false; } if (!certPaths.equals(that.certPaths)) { return false; } if (!certValues.equals(that.certValues)) { return false; } return true; } @Override public int hashCode() { int result = 1; result += 31 * result + keyPaths.hashCode(); result += 31 * result + keyValues.hashCode(); result += 31 * result + certPaths.hashCode(); result += 31 * result + certValues.hashCode(); return result; } @Override public PemKeyCertOptions clone() { return new PemKeyCertOptions(this); } }