Para proteger a tramitação de dados entre os programas cliente e o servidor do Elipse Alarm Manager, é altamente recomendado o uso de certificados de segurança PKI (SSL/TLS) principalmente quando a comunicação estiver sendo realizada pela Internet.
O Let’s Encrypt é uma CA (Certificate Authority) livre, automatizada e aberta, com patrocinadores (na data de publicação deste post) como Mozilla, Cisco, Facebook, Akamai, EFF, Chrome, entre diversas outros. É uma excelente forma de proteger gratuitamente projetos web.
Existem alguns projetos para a geração e assinatura de certificados pela Let’s Encrypt, mas neste post estaremos falando especificamente do ACMESharp, uma biblioteca e cliente .NET para o protocolo ACME (Automated Certificate Management Environment) que você pode utilizar em ambiente Windows através do PowerShell e sem necessidade do IIS (Internet Information Services).
Passo a passo com ACMESharp
- 
Abra o PowerShell
 - 
Instale o ACMESharp através do PowerShell Gallery com o comando 2.1. ou 2.2. caso ocorra um conflito:
2.1.Install-Module -Name ACMESharp
2.2.Install-Module -Name ACMESharp -AllowClobber - 
Carregue o ACMESharp para o PowerShell para que você possa executar os comandos abaixo.
3.1.Import-Module ACMESharp - 
Inicialize o cofre onde serão armazenados seus certificados e os itens relacionados a eles.
4.1.Initialize-ACMEVault - 
Crie a conta que será notificada pelo Let’s Encrypt para a renovação do certificado.
5.1.New-ACMERegistration -Contacts mailto:seuemail@seudominio.com.br -AcceptTos
5.2. O-AcceptTossignifica que você aceita os Terms-of-Service (TOS). - 
Envie o nome de DNS que você deseja tornar seguro com o certificado PKI.
6.1.New-ACMEIdentifier -Dns example.com -Alias dns1
6.2. Odns1serve para identificar este envio nos comandos seguintes. - 
Escolha o método para validar que você é proprietário do domínio. Você pode optar por validar por HTTP ou por DNS.
7.1. Validação por HTTP
7.1.1.Complete-ACMEChallenge dns1 -ChallengeType http-01 -Handler manual
7.1.2. O output será uma orientação sobre qual arquivo criar em seu host do http server. Portanto, crie o arquivo e coloque o conteúdo indicado.
7.2. Validação por DNS
7.2.1.Complete-ACMEChallenge dns1 -ChallengeType dns-01 -Handler manual
7.2.2. O output será uma orientação sobre qual registro TXT e respectivo valor você deve adiciona em seu DNS. - 
Envie para o servidor a solicitação para que ele revise a sua propriedade do domínio.
8.1. Envio da validação HTTP
8.1.1.Submit-ACMEChallenge dns1 -ChallengeType http-01
8.2. Envio da validação DNS
8.2.1.Submit-ACMEChallenge dns1 -ChallengeType dns-01 - 
Verifique se sua solicitação já foi validada.
9.1.(Update-ACMEIdentifier dns1 -ChallengeType http-01).Challenges | Where-Object {$_.Type -eq "http-01"}
9.2. Esse comando retorna o status de sua solicitação. Se no campo estivervalidé porque ocorreu tudo bem,pendingé porque está em processo de validação einvalidé porque sua validação falhou, portanto, verifique se você fez o passo 7 corretamente. - 
Gere a solicitação de assinatura de certificado (CSR).
10.1. Se você for solicitar para um domínio.
10.1.1.New-ACMECertificate dns1 -Generate -Alias cert1
10.2. Se você for solicitar para múltiplos domínios (SAN - Subject Alternative Names).
10.2.New-ACMECertificate dns1 -Generate -AlternativeIdentifierRefs dns2,dns3,dns4 -Alias multiNameCert - 
Envie a CSR.
11.1.Submit-ACMECertificate cert1 
Pronto!
Obtendo os arquivos gerados pelo ACMESharp
Para exportar os arquivos e você poder utilizá-los. Utilize os comandos abaixo, mas observe que você não precisa exportar todos os arquivos. Listamos abaixo todos apenas para seu conhecimento, para o EAM utilizamos os arquivos para Nginx que são apenas os arquivos com extensão .pem.
- Exportar a private key.
1.1.Get-ACMECertificate cert1 -ExportKeyPEM "path\to\privkey.pem" - Exportar o CSR.
2.1.Get-ACMECertificate cert1 -ExportCsrPEM "path\to\cert.csr.pem" - Exportar certificado público assinado pelo Let’s Encrypt.
3.1.Get-ACMECertificate cert1 -ExportCertificatePEM "path\to\cert.pem" -ExportCertificateDER "path\to\cert.crt" - Exportar o certificado intermediário da CA.
4.1.Get-ACMECertificate cert1 -ExportIssuerPEM "path\to\chain.pem" -ExportIssuerDER "path\to\chain.crt"
4.2. Caso ocorra o erro “no issuer certificates found”, execute:Update-ACMECertificate cert1 - Exportar o arquivo PKCS#12 (PFX, utilizado pelo Windows e IIS).
5.1.Get-ACMECertificate cert1 -ExportPkcs12 "path\to\cert.pfx"
5.2.Get-ACMECertificate cert1 -ExportPkcs12 "path\to\cert.pfx" -CertificatePassword 'g1Bb3Ri$h' - Gerar o fullchain.pem que é utilizado por diversos servidores incluindo o Nginx utilizado pelo Elipse Alarm Manager.
6.1. Crie um arquivo com o nomefullchain.pemno diretório que você estava exportando os outros itens acima.
6.2. Copie o conteúdo decert.peme cole dentro defullchain.pem.
6.3. Na linha abaixo do conteúdo decert.pemdentro defullchain.pem, copie e cole e conteúdo dechain.pem.
6.4. Salve o arquivofullchain.pem. 
Ativando sua conexão segura
- 
Navegue até a pasta de instalação do seu Elipse Alarm Manager, geralmente localizada em
C:\Program Files (x86)\Elipse Software\Elipse Alarm Manager Server. - 
Estando na pasta do Elipse Alarm Manager vá até
\Bin\Site\confe abra o arquivonginx.confem modo de administrador. - 
Substitua o conteúdo de
nginx.confpelo conteúdo abaixo:user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; gzip on; server { listen 443; server_name example.com; root html; ssl on; ssl_certificate path\to\fullchain.pem; ssl_certificate_key path\to\privkey.pem; ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!MD5; location /api { add_header Access-Control-Allow-Origin "*"; add_header Access-Control-Allow-Methods "*"; add_header Access-Control-Allow-Headers "Content-Type"; if ($request_method = OPTIONS) { return 200; } proxy_http_version 1.1; proxy_pass http://localhost:8091; } location / { try_files $uri $uri/ /index.html?$args; } } server { listen 80; server_name example.com; return 301 https://example.com$request_uri; } } 
OBSERVAÇÃO: Você deve substituir no conteúdo acima o path\to\ pelo caminho que você havia definido e também deve substituir o example.com pelo seu domínio do qual você solicitou o certificado.
Referências
- ACMESharp (https://github.com/ebekker/ACMESharp)