Martin
by Martin Kysel

使用LET在NOODB中加密证书 - 逐步教程

介绍

本教程将通过免费使用整个过程 让我们加密 Nuodb中的证书。首先,我们将使用Per的Recrypt创建证书,如文档中所述。其次,我们将这些证书转换为Nuodb流程所需的各种证书格式。在本教程结束时,我们将向您展示在Nuodb日志文件中寻找什么以及如何在支持的数据库驱动程序中使用TLS。

获取签名证书

获取签名证书的过程通常涉及生成密钥对和证书签名请求(CSR.),已提交证书颁发机构(加利福尼亚州)。获取签名证书后,必须将其转换为Nuodb支持的格式。有关组织如何获取签名证书的详细信息,请参阅所选CA的文档。

在本教程中,我们将按照Let的加密CA文档中所述的步骤操作。

  1. 下载允许我们加密的克隆 官方GitHub存储库. /opt is a common installation directory for third-party packages, so let’s install the clone to
    
    /opt/letsencrypt: 
    sudo git clone //github.com/letsencrypt/letsencrypt /opt/letsencrypt
  2. 导航到新/ opt / letsencrypt目录: 
    
    cd /opt/letsencrypt
  3. Run Let’s Encrypt with the --standalone parameter. For each additional domain name requiring a certificate, add -d example.com to the end of the command. 
    
    sudo -H ./letsencrypt-auto certonly --standalone -d example.com 
    -d www.example.com
  4. 按照让我们的加密命令行提示
  5. LET加密脚本的输出显示证书的存储位置;在这种情况下,
    
    /etc/letsencrypt/live:
    sudo ls /etc/letsencrypt/live
    > example.com
    sudo ls /etc/letsencrypt/live/example.com
    > cert.pem       chain.pem      fullchain.pem  privkey.pem
  6. Your certificates will be in the PEM format and will contain the -----BEGIN CERTIFICATE----- and  -----END CERTIFICATE-----  sections. To verify your public certificate run
    
    openssl x509 -in /etc/letsencrypt/live/example.com/cert.pem -text -noout
    > 
    Certificate:
        Data:
            Version: 3 (0x2)
    		… 
    Signature Algorithm: sha256WithRSAEncryption
            Issuer: C=US, O=Let's Encrypt, CN=Let's Encrypt Authority X3
            Validity
                Not Before: Jan 28 00:03:40 2019 GMT
                Not After : Apr 28 00:03:40 2019 GMT
            Subject: CN=example.com
    X509v3 extensions:
                X509v3 Key Usage: critical
                    Digital Signature, Key Encipherment
                X509v3 Extended Key Usage: 
                    TLS Web Server Authentication, TLS Web Client Authentication
                X509v3 Basic Constraints: critical
                    CA:FALSE
                Authority Information Access: 
                    OCSP - URI:http://ocsp.int-x3.letsencrypt.org
                    CA Issuers - URI:http://cert.int-x3.letsencrypt.org/
                X509v3 Subject Alternative Name: 
                    DNS:example.com, DNS:www.example.com
    

     

笔记: NOODB尽可能建议使用私人CA。有关如何生成CSR的更多信息,请参阅Nuodb Docs - 启用TLS..

有关更多信息,请咨询: Using Certificates Signed by a Public Certificate Authority

转换证书格式

NOODB管理员接受PKCS12和JKS文件格式。这些是用于X509证书数据的行业标准格式,这些格式中的任何一个都可以用于Nuodb管理流程的密钥库,它包含其密钥对证书和信任库,其中包含由管理过程可信赖的证书集。

由于Nuodb管理员不支持PEM格式,因此我们将允许“加密到PKCS12文件(keystore和TrustStore)来转换创建的PEM文件”诺福德管理流程可以加载。

  1. 从PEM文件创建密钥库
    
    $ openssl pkcs12 -export -name nuoadmin -out nuoadmin.p12 -inkey 
    privkey.pem -in fullchain.pem 
    Enter Export Password: 
    Verifying - Enter Export Password: 
    
  2. 将证书复制到信任库
    $ nuocmd import certificate --keystore nuoadmin.p12 
    --store-password "$PASSWD" \
        --truststore nuoadmin-truststore.p12 --truststore-password 
    "$PASSWD"
    
  3. 统一服务器证书名称
    ​$ cp cert.pem nuoadmin.cert
    

笔记: 假设$ Passwd环境变量与您在步骤1中创建PKCS键的相同值。

有关在证书格式之间转换的详细信息,请参阅以下资源:

生成客户端证书

客户端授权使用X509客户端证书在NOODB Admin Tier中授权。要保证部署安全,Nuodb遵循密码验证的最佳实践。

您可以使用标准的第三方工具(如OpenSSL)创建客户端PKCS12证书(请参阅上面的资源)。在这里,我们将使用Nuocmd的Nuodb便利功能。

  1. 生成Nuodb命令客户端使用的密钥对证书: nuocmd
    create keypair --keystore nuocmd.p12 --store-password "$PASSWD"
    --dname "CN=nuocmd"
     
  2. 将在上一步中生成的客户端证书导入TrustStore: nuocmd
    import certificate --keystore nuocmd.p12 --store-password "$PASSWD" --truststore nuoadmin-truststore.p12
    --truststore-password "$PASSWD"
     
  3. 将客户端密钥和证书转换为PEM格式,以便Nuodb命令(Nuocmd)使用它: nuocmd show certificate --keystore nuocmd.p12
    --store-password "$PASSWD" > nuocmd.pem

After this step, the truststore used by NuoDB admin processes nuoadmin-truststore.p12 should contain both the admin certificate and the client certificate. You can verify this by running: openssl pkcs12 -info -in nuoadmin-truststore.p12

Enter Import Password:
Certificate bag
Bag Attributes
    friendlyName: nuoadmin
subject=/CN=example.com
issuer=/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
-----BEGIN CERTIFICATE-----
… 
-----END CERTIFICATE-----
Certificate bag
Bag Attributes
    friendlyName: nuocmd
subject=/CN=nuocmd
issuer=/CN=nuocmd
-----BEGIN CERTIFICATE-----
… 
-----END CERTIFICATE-----

The file nuocmd.pem will be used by NuoDB scripts that only accept PEM files to communicate with the NuoDB admin processes.

启动Nuodb管理员与TLS

在启动NOODB之前,请确保所有证书都处于众所周知的位置,并且可以由NOODB用户访问。

cp nuoadmin.p12 nuoadmin-truststore.p12 nuocmd.pem nuoadmin.cert 
/etc/nuodb/keys
chown -R nuodb:nuodb /etc/nuodb/keys

更新Nuoadmin.conf,以便启用TLS并指定生成的证书文件:

    "ssl": "真的",
    "keystore": "/etc/nuodb/keys/nuoadmin.p12",
    "keystore-type": "PKCS12",
    "keystore-password": "",
    "truststore": "/etc/nuodb/keys/nuoadmin-truststore.p12",
    "truststore-type": "PKCS12",
    "truststore-password": "",

启动Nuodb管理流程


service nuoadmin start

连接到管理员使用 nuocmd

/etc/nuodb/bin/nuocmd --client-key /etc/nuodb/keys/nuocmd.pem 
--verify-server /etc/nuodb/keys/nuoadmin.cert show domain
…

您可以将环境变量设置为命令行参数:

export NUOCMD_CLIENT_KEY=/etc/nuodb/keys/nuocmd.pem
export NUOCMD_VERIFY_SERVER=/etc/nuodb/keys/nuoadmin.cert
nuocmd show domain

启动最小数据库:

# create an archive
nuocmd create archive --db-name test --server-id nuodbadmin-0 
--archive-path /var/opt/nuodb/test-archives/

# create a database
nuocmd create database --db-name test --dba-user dba --dba-password 
dba --te-server-ids nuodbadmin-0

有关更多信息,请咨询: 启用TLS. Encryption.

在日志文件中验证配置

Locate your nuoadmin.log file and look for a log file that starts with TLS Support ENABLED:. This is the engine log report.

cat /var/log/nuodb/nuoadmin.log
TLS Support ENABLED:
  Domain CAs:
    Certificate #0 CN nuocmd: expires Feb 24 02:03:23 2119 GMT
    Certificate #1 CN nuoadmin: expires Feb 24 02:03:22 2119 GMT
  Intermediate Certificates: 
    Certificate #2 CN nuoadmin: expires Feb 24 02:03:22 2119 GMT
  Engine Certificate:
    Certificate #3 CN localhost: expires Jun  4 21:32:01 2020 GMT
Certificate chain will expire on Jun  4 21:32:01 2020 GMT

Domain CAs should list both the nuocmd client certificate and the nuoadmin server certificate. All NuoDB engine processes will also print the expiration date of the certificate chain.

在驱动程序中使用证书

每个Nuodb驱动程序都接受不同类型的证书格式。您可以看到列表 使用TLS和LDAP连接到数据库 #支持的信任商店格式

在这个例子中,我们将专注于我们最简单的驱动程序,Pynuodb驱动程序。

  1. 从中下载pynuodb的克隆 官方GitHub存储库.

    $ git clone //github.com/nuodb/nuodb-python.git; CD Nuodb-Python
     
  2. 遵循这个例子 //github.com/nuodb/nuodb-python#id3 通过以下修改:

    options = {"schema": "test",'trustStore':
    "/etc/nuodb/keys/nuoadmin.cert"}
     
  3. 恭喜,您的域名中有TLS!

笔记: For simplicity, NuoDB recommends using the root CA certificate as the trustStore for the driver. The location of well known 3rd party certificates varies on every system. On Ubuntu the certificates can be found in /etc/ssl/certs. The Let’s Encrypt root is /etc/ssl/certs/DST_Root_CA_X3.pem. Or alternatively, you can look in the 让我们加密信任链. Once you have located the CA root on your system, you can use it as your driver’s trustStore, if the driver supports PEM files. ‘trustStore’: “/etc/ssl/certs/DST_Root_CA_X3.pem”.

有关C ++驱动程序的信息,请参阅文档 这里.

有关JDBC驱动程序的信息,请参阅文档 这里.

(本文于2019年11月4日更新,添加链接。)