Nginx

É possível configurar o nginx para utilizar o NetHSM através do motor OpenSSL que, por sua vez, utiliza o módulo PKCS#11 do NetHSM.

O ficheiro do certificado tem de estar no disco, mas a chave privada pode ser utilizada a partir do NetHSM.

Um exemplo completo está disponível em abaixo.

OpenSSL Configuration

Configure o motor OpenSSL seguindo o guia de configuração do motor OpenSSL ` <openssl.html#engine>` __.

Os provedores ainda não são suportados pelo Nginx.

Nota

A utilização do motor OpenSSL libp11 versão 0.4.12 ou mais antiga e um NetHSM com muitas chaves tornará o carregamento inicial do Nginx lento (mais de um minuto para mil chaves). Recomenda-se a utilização da versão 0.4.13 ou mais recente ou a construção do motor a partir da fonte ` <https://github.com/OpenSC/libp11>` __.

Nginx Configuration

ssl_engine pkcs11;

server {
    listen       443 ssl;
    server_name  localhost;

    ssl_certificate      /certs/certificate.pem;

    ssl_certificate_key "engine:pkcs11:pkcs11:object=webserver;type=private";

    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  10s;
    ssl_session_tickets off;

    ssl_protocols TLSv1.3;
    ssl_prefer_server_ciphers  off;

    # HSTS (ngx_http_headers_module is required) (63072000 seconds)
    add_header Strict-Transport-Security "max-age=63072000" always;

    # OCSP stapling
    ssl_stapling on;
    ssl_stapling_verify on;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

O ssl_certificate deve apontar para um ficheiro de certificado no disco.

O ssl_certificate_key pode ser uma configuração OpenSSL. Aqui utilizamos o motor OpenSSL com o módulo PKCS#11 e seleccionamos a chave privada com a etiqueta/ID webserver e o tipo de chave private.

ssl_certificate_key "engine:pkcs11:pkcs11:object=webserver;type=private";

Nota

É necessário gerar o certificado separadamente e depois carregá-lo no NetHSM. Se o certificado no disco e a chave no NetHSM não corresponderem, o nginx não será iniciado.

libnethsm_pkcs11 Configuration

slots:
  - label: LocalHSM
    description: Local HSM (docker)
    url: "https://192.168.3.161:8443/api/v1"
    operator:
      username: "operator"
      password: "opPassphrase"

Para proteger a palavra-passe, pode fornecê-la através de uma variável de ambiente ` <pkcs11-setup.html#passwords>` __) ou fornecê-la na configuração do nginx:

ssl_certificate_key "engine:pkcs11:pkcs11:object=webserver;type=private;pin=opPassphrase";

Example

Para proteger a palavra-passe, pode fornecê-la através de uma variável de ambiente <x id=»49»></x> <x id=»71»></x><x id=»100»></x> __) ou fornecê-la na configuração do nginx:

Aviso

A execução do script de geração exclui a chave webserver e a substitui.

  1. Para poder gerar chaves e utilizadores num Namespace, o Namespace tem de ser criado por um utilizador <x id=»94»></x>R-Administrator<x id=»110»></x>. Depois de o Namespace ter sido criado, os utilizadores <x id=»155»></x>R-Administrator<x id=»171»></x> já não podem criar, eliminar ou modificar utilizadores nesse Namespace. Isto permite proteger as chaves dos Namespaces que são acedidas pelo R-Administrator (também indiretamente, adicionando um novo utilizador em nome ou redefinindo as credenciais do utilizador ou administrador existente). Por conseguinte, é necessário criar um utilizador <x id=»468»></x>N-Administrator<x id=»484»></x> para o Namespace antes de criar o Namespace. <x id=»540»></x>Os utilizadores R-Administrator<x id=»556»></x> também podem eliminar um Namespace com todas as chaves contidas.

  2. Download and install the latest version of the nethsm-pkcs11 driver available from here.

  3. Instale o mecanismo OpenSSL PKCS11 conforme descrito no OpenSSL Manual. Não é necessário criar um ficheiro de configuração.

  4. Ajuste as variáveis HOST, ADMIN_ACCOUNT e ADMIN_ACCOUNT_PWD em container/nginx/generate.sh de forma que HOST contenha a URL e a porta do seu NetHSM, ADMIN_ACCOUNT contenha o nome de usuário de uma conta de administrador e ADMIN_ACCOUNT_PWD a senha correspondente. Além disso, configure o caminho absoluto do mecanismo OpenSSL PKCS11 em OPENSSL_PKCS11_ENGINE_PATH e o caminho absoluto da biblioteca NetHSM PKCS11 em NETHSM_PKCS11_LIBRARY_PATH.

  5. Criar um ficheiro de configuração PKCS11 do NetHSM numa das localizações conhecidas, por exemplo, /etc/nitrokey/p11nethsm.conf. Deve ter configurado uma conta de operador e utilizar a mesma instância do NetHSM especificada anteriormente no script de geração.

  6. Atualizar a configuração PKCS11 em container/nginx/p11nethsm.conf com o URL do NetHSM e credenciais de operador válidas.

  7. Generate the certificate and key.

./container/nginx/generate.sh
  1. Construir o contentor.

docker build -f container/nginx/Dockerfile . -t pkcs-nginx
  1. Run the container.

docker run -p 9443:443 -p 9080:80 pkcs-nginx

Configurar o OpenVPN (apenas Windows)