Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
  This guide shows you how to import a custom SSL certificate for enterprise and production environments.
Table of Contents

Prerequisites

Before you create a custom certificate, make sure your environment is ready:

  • Install Datameer and enable TLS.

  • Install Java Cryptography Extension (JCE) for Java 7 or 8.
  • Work within the current Datameer installation directory.
  • Familiarize yourself with obfuscating passwords, as in the following example, where the password "changeit" is obfuscated:

    Code Block
    languagebash
    titleObfuscate password
    [datameer@<host> current]$ java -cp lib/jetty-util-* org.eclipse.jetty.util.security.Password
    <timestamp>:INFO::main: Logging initialized @75ms
    Usage - java org.eclipse.jetty.security.Password [<user>] <password>
    If the password is ?, the user will be prompted for the password
    # According 
    # Usage - java org.eclipse.jetty.security.Password [<user>] <password> 
    # the user value is optional 
    [datameer@<host> current]$ java -cp lib/jetty-util-* org.eclipse.jetty.util.security.Password changeit
    <timestamp>:INFO::main: Logging initialized @75ms
    changeit
    OBF:1vn21ugu1saj1v9i1v941sar1ugw1vo0
    MD5:b91cd1a54781790beaa2baf741fa6789

Providing a Custom Certificate for Embedded Jetty

Get a certificate

  1. Generate a private key and a certificate signing request (CSR) file before requesting CA authorized certificates:

    Code Block
    languagebash
    titleCreate CSR file
    openssl req -new -newkey rsa:2048 -nodes -keyout <yourdomain>.key -out <yourdomain>.csr
  2. Download the certificates from the certificate authority (CA).
  3. Check your X.509 certificates:

    Code Block
    languagebash
    titleCheck certificate
    openssl x509 -in <yourdomain>.crt -text -noout
  4. Generate a PKCS12 file:

    Code Block
    languagebash
    titleGenerate PKCS12 file
    openssl pkcs12 -inkey <yourdomain>.key -in <yourdomanin>.crt -export -out datameer.p12 -name datameer

    This file bundles the private  key together with the public X.509 certificate and is a public key cryptographic standard. The private key needs to be protected by a password

    For the key password, you can use keypwd

  5. Obfuscate the password.

    Code Block
    languagebash
    titleObfuscate password
    [datameer@<host> current]$ java -cp lib/jetty-util-* org.eclipse.jetty.util.security.Password datameer keypwd
    <timestamp>:INFO::main: Logging initialized @75ms
    keypwd
    OBF:1u2u1wml1z7s1z7a1wnl1u2g
    MD5:4a27e9a4bd7a907bd04606dd05be4d25
    CRYPT:da3b2s9U.Q7Nw

    The obfuscated key password, in this example OBF:1u2u1wml1z7s1z7a1wnl1u2g for keypwd, needs to be provided later as jetty.keymanager.password in Jetty's start.ini file. 


Generate a keystore 

Generate a repository of security certificates for Datameer's embedded Jetty. For this process, use keytool

  1. Check the default keystore:

    Code Block
    languagebash
    titleCheck keystore
    [datameer@<host> current]$ keytool -list -v -keystore etc/keystore | grep -i 'jetty'
    Enter keystore password:  storepwd
    Alias name: jetty
    Owner: CN=jetty.mortbay.org, OU=Jetty, O=Mort Bay Consulting Pty Ltd, L=Unknown, ST=Unknown, C=Unknown
    Issuer: CN=jetty.mortbay.org, OU=Jetty, O=Mort Bay Consulting Pty Ltd, L=Unknown, ST=Unknown, C=Unknown
  2. Back up the default keystore file:

    Code Block
    languagebash
    titleBackup keystore
    mv etc/keystore etc/keystore.original
  3. Create a new Java KeyStore (JKS) file using the datameer.p12 file that was generated previously. The keystore needs to be protected by a password. 

    Code Block
    languagebash
    titleCreate keystore
    keytool -importkeystore -srckeystore datameer.p12 -srcstoretype PKCS12 -destkeystore etc/keystore 

    For the keystore password you can use storepwd

  4. Obfuscate the password:

    Code Block
    languagebash
    titleObfuscate password
    [datameer@<host> current]$ java -cp lib/jetty-util-* org.eclipse.jetty.util.security.Password datameer storepwd
    <timestamp>:INFO::main: Logging initialized @75ms
    storepwd
    OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4
    MD5:7bfa04a176c6d48e5283e1c037e4668e
    CRYPT:dake2.vBb3e52

    The obfuscated keystore password, in this example OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4 for storepwd, needs to be provided later as jetty.keystore.password in Jetty's start.ini file. 

  5. Check the generated repository:

    Code Block
    languagebash
    titleCheck keystore
    [datameer@<host> current]$ keytool -list -v -keystore etc/keystore | grep -i 'datameer'
    Enter keystore password:  storepwd
    Alias name: datameer
    Owner: <...>
    Issuer: <...>

Use your own keystore

To use the custom certificate stored in the created Java KeyStore (JKS) file, configure the start up configuration file. 

  1. Check the current configuration:

    Code Block
    languagebash
    titleCheck current config
    # The path to the keystore file 
    [datameer@<host> current]$ java -jar start.jar --list-config | grep -i 'store ='
     jetty.keystore = etc/keystore
     jetty.truststore = etc/keystore
    # The necessary passwords 
    [datameer@<host> current]$ java -jar start.jar --list-config | grep -i 'password'
     jetty.keymanager.password = OBF:1u2u1wml1z7s1z7a1wnl1u2g
     jetty.keystore.password = OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4
     jetty.truststore.password = OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4
  2. Back up the default configuration:

    Code Block
    languagebash
    titleBackup config
    cp start.ini start.ini.original 
  3. Configure start.ini:

    Info
    iconfalse
    Since this example uses default values, no changes are necessary.
    Code Block
    languagebash
    titleConfigure start.ini
    ## Set up a demonstration keystore and truststore
    jetty.keystore=etc/keystore
    jetty.truststore=etc/keystore
    
    ## Set the demonstration passwords
    ## Note that OBF passwords are not secure, just protected from casual observation
    ## See http://www.eclipse.org/jetty/documentation/current/configuring-security-secure-passwords.html
    jetty.keystore.password=OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4   # storepwd
    jetty.keymanager.password=OBF:1u2u1wml1z7s1z7a1wnl1u2g         # keypwd
    jetty.truststore.password=OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4 # storepwd
  4. Create a configuration change log:

    Code Block
    languagebash
    titleCreate changelog
    diff -e start.ini.original start.ini > changes.start.ini
  5. Restart Datameer to make the change active and monitor the boot process:

    Code Block
    languagebash
    titleStart and monitor
    dmstart
    dmlog

Renew certificate

Certificates typically have an expiration date, so it is necessary to renew them. To do, so just follow the following steps again:

Anchor
trustcertificates
trustcertificates
Trusting Custom Certificates from Other Services

The Java Virtual Machine (JVM) enforces security and validates the certification path to the requested target. If the certificate isn't provided from a generally trusted root certificate, you need to trust the certificate by adding it into the truststore of the Java Virtual Machine (JVM) that runs Datameer. 

  • Gather the certificate:

    Code Block
    languagebash
    titleGather certificate
    openssl s_client -connect <host>.<domain>.<tld>:<port> -showcerts </dev/null 2>/dev/null | openssl x509 -outform PEM > <yourservice>.pem
  • Validate the certificate:

    Code Block
    languagebash
    titleValidate certificate
    openssl x509 -in <yourservice>.pem -inform pem -noout -text
  • Trust the certificate by importing it:

    Code Block
    languagebash
    titleImport certificate
    sudo keytool -keystore ${JAVA_HOME}/jre/lib/security/cacerts -storepass changeit -import -trustcacerts -v -alias <yourservice> -file <yourservice>.pem
  • Start and stop Datameer service:

    Code Block
    languagebash
    titleStart and stop
    dmstop
    # This will create a new instance of the JVM 
    dmstart
    dmlog

Further Information 

For more information, refer to the Secure Socket Extension (JSSE) Reference Guide.  

Info
iconfalse

The JDK ships with a limited number of trusted root certificates in the <java-home>/lib/security/cacerts file. As documented in keytool , it is your responsibility to maintain (that is, add/remove) the certificates contained in this file if you use this file as a truststore.

You can also review available documentation from Hadoop distributors, such as Creating Java Keystores and TruststoresUnderstanding the SSL Keystore Factory, and Demystify LDAP, SSL, CA Cert integration. If you want to connect to an specific service, see vendor documentation such as Configure External SSL for Tableau.