# Certificados SSL



# Emitir e preparar certificados do ICPEdu

## 1. Introdução

<span style="font-weight: 400;">A Infraestrutura de Chaves Públicas para Ensino e Pesquisa (AC ICPEdu) é o serviço de certificação digital oferecido pela RNP, que provê infraestrutura pronta para a emissão de certificados digitais e chaves de segurança.</span>

<span style="font-weight: 400;">A modalidade adotada pelo IFPE é a “Certificado Corporativo”, onde as instituições clientes emitem gratuitamente certificados digitais qualificados pela GlobalSign, uma das maiores autoridades certificadoras do mundo. Isso fortalece a confiança dos usuários, que têm a garantia de estar fazendo negócios com uma instituição idônea.</span>

<span style="font-weight: 400;">Este documento visa a orientar a criação do certificado através do portal web, os comandos necessários para gerar o certificado e a chave privada e a configuração destes nos servidores web Apache e NGinx.</span>

<span style="font-weight: 400;">Observe que todos os passos são obrigatórios.</span>

## 2. Emitindo o certificado

<span style="font-weight: 400;">O procedimento para emissão de certificados é mostrado no link a seguir, provido pela documentação própria do ICPEdu/RNP.   
</span>

**Observe que são necessários os passos do item 2 e 2.1, apenas.**

**[Manuais e instruções de uso da Certificado Corporativa \[Emitindo o certificado\]](https://wiki.rnp.br/pages/viewpage.action?pageId=86102856#CertificadoCorporativa-Instru%C3%A7%C3%B5esdeuso-2.Emitindoocertificado)**

<p class="callout info"><span style="font-weight: 400;">No item 2.1.4 </span><span style="font-weight: 400;">da documentação utiliza um CSR (Requisição de Assinatura de Certificado). Caso não possua uma CSR utilize a opção “Não tenho uma CSR \[…\]” e uma será criada pelo sistema automaticamente.</span></p>

#### 2.1. Baixando o certificado gerado

<span style="font-weight: 400;">O procedimento para baixar os certificados é mostrado no link a seguir, provido pela documentação própria do ICPEdu/RNP. </span>

**Observe que são necessários os passos do item 3, apenas.**

**[Manuais e instruções de uso da Certificado Corporativa \[Baixando os certificados emitidos\]](https://wiki.rnp.br/pages/viewpage.action?pageId=86102856#CertificadoCorporativa-Instru%C3%A7%C3%B5esdeuso-3.Baixandooscertificadosemitidos)**

<p class="callout info"><span style="font-weight: 400;">O nome do arquivo gerado no passo 2.1 é composto por 4 letras maiúsculas e 12 números e com a extensão “.pfx”. O seguinte exemplo será utilizado neste documento: </span>**CEPO171124239914.pfx**</p>

## 3. Configurando os arquivos

<span style="font-weight: 400;">Em um computador com Linux instalado, siga os passos a seguir:</span>

<span style="font-weight: 400;"> 1. Certifique-se que o pacote “openssl” esteja instalado.</span>

<p class="callout danger"><span style="font-weight: 400;">Os passos a seguir não funcionarão caso o pacote “openssl” não esteja instalado.</span></p>

<span style="font-weight: 400;"> 2. Copie o arquivo “.pfx” que foi o certificado gerado no item 2 (“Emissão do certificado”) para o diretório de sua preferência. Recomendamos o diretório "/tmp" e vamos utilizá-lo neste documento.</span>

```shell
[usuario@linux ~]$ cp CEPO171124239914.pfx /tmp
[usuario@linux ~]$ cd /tmp
```

<p class="callout warning"><span style="font-weight: 400;">Nos passos 3.3 e 3.4, no momento da extração será solicitada a senha gerada no item 2 (“Emissão do certificado” </span></p>

<span style="font-weight: 400;"> 3. Dentro do diretório de sua preferência, extraia o certificado do arquivo “.pfx” :</span>

```shell
[usuario@linux /tmp]$ openssl pkcs12 -in CEPO171124239914.pfx -clcerts -nokeys -out CEPO171124239914.crt
```

<span style="font-weight: 400;"> 4. Dentro do diretório de sua preferência, extraia a Chave privada</span>

```shell
[usuario@linux /tmp]$ openssl pkcs12 -in CEPO171124239914.pfx -nocerts -nodes -out CEPO171124239914.key
```

<span style="font-weight: 400;"> 5. Dentro do diretório de sua preferência, faça download da cadeia de certificados raiz do arquivo “.pfx” :</span>

```shell
[usuario@linux /tmp]$ ROOT_CA_URL='https://wiki.rnp.br/download/attachments/86102856/gs_root.pem?version=1&modificationDate=1412194560000&api=v2'
[usuario@linux /tmp]$ INT_CA_URL='https://wiki.rnp.br/download/attachments/86102856/intermediate.pem?version=2&modificationDate=1427380622000&api=v2'
[usuario@linux /tmp]$ wget --no-check-certificate -c "$ROOT_CA_URL" -O /tmp/globalsign-ca.crt
[usuario@linux /tmp]$ wget --no-check-certificate -c "$INT_CA_URL" -O /tmp/icpedu-chain.crt
```

<span style="font-weight: 400;"> 6. Gere o certificado que inclui a cadeia de certificados raiz e do certificado gerado no item 3.3:</span>

```shell
[usuario@linux /tmp]$ cat CEPO171124239914.crt icpedu-chain.crt > CEPO171124239914-chain.crt
```

<span style="font-weight: 400;"> 7. </span><span style="font-weight: 400;">Gere o arquivo que contém os parâmetros Diffie-Hellman:</span>

```shell
[usuario@linux /tmp]$ openssl dhparam -out dh-4096.pem 4096
```

<span style="font-weight: 400;">Neste ponto devemos ter os seguintes arquivos disponíveis:</span>

- ***dh-4096.pem***

<span style="font-weight: 400;">Arquivo contém os parâmetros Diffie-Hellman usado para fortalecer o canal criptografado e dificultar ataques que interceptam o tráfego criptografado.</span>

- ***icpedu-chain.crt***

<span style="font-weight: 400;">Arquivo contém a cadeia de autoridades de certificação que inclui a CA do ICPEdu e as da Globalsign, usado para permitir que o cliente confira a validade dos certificados.</span>

- ***globalsign-ca.crt***

 <span style="font-weight: 400;">Arquivo contém o certificado da CA raiz da Globalsign, usado para permitir que o cliente confira a validade dos certificados.</span>

- ***CEPO171124239914-chain.crt***

 <span style="font-weight: 400;">Arquivo inclui a cadeia de certificados que inclui o do ICPEdu, os da Globalsign, e o certificado gerado para o dispositivo final ou aplicação. É ele que será apresentado aos navegadores dos usuários.</span>

- ***CEPO171124239914.key***

<span style="font-weight: 400;">Arquivo inclui a chave privada do certificado gerado para o dispositivo final ou aplicação. Ele será usada para compor o fluxo criptografado, juntamente com o certificado, aos navegadores dos usuários.</span>

<p class="callout warning"><span style="font-weight: 400;">Nesse momento distribua os arquivos ao usuário e solicite que eles acessem a página "**Instalar certificados do ICPEdu**"  
</span></p>

# Instalar certificados do ICPEdu

## 1. Introdução

<span style="font-weight: 400;">A Infraestrutura de Chaves Públicas para Ensino e Pesquisa (AC ICPEdu) é o serviço de certificação digital oferecido pela RNP, que provê infraestrutura pronta para a emissão de certificados digitais e chaves de segurança.</span>

<span style="font-weight: 400;">A modalidade adotada pelo IFPE é a “Certificado Corporativo”, onde as instituições clientes emitem gratuitamente certificados digitais qualificados pela GlobalSign, uma das maiores autoridades certificadoras do mundo. Isso fortalece a confiança dos usuários, que têm a garantia de estar fazendo negócios com uma instituição idônea.</span>

<span style="font-weight: 400;">Este documento visa a orientar a configuração do certificado emitido através do Sistema de Chamados do IFPE nos servidores web Apache e NGinx.</span>

<span style="font-weight: 400;">Observe que todos os passos são obrigatórios.</span>

## 2. Utilizando os arquivos

<span style="font-weight: 400;">Neste ponto devemos ter os seguintes arquivos disponíveis:</span>

- ***dh-4096.pem***

<span style="font-weight: 400;">Arquivo contém os parâmetros Diffie-Hellman usado para fortalecer o canal criptografado e dificultar ataques que interceptam o tráfego criptografado.</span>

- ***icpedu-chain.crt***

<span style="font-weight: 400;">Arquivo contém a cadeia de autoridades de certificação que inclui a CA do ICPEdu e as da Globalsign, usado para permitir que o cliente confira a validade dos certificados.</span>

- ***globalsign-ca.crt***

 <span style="font-weight: 400;">Arquivo contém o certificado da CA raiz da Globalsign, usado para permitir que o cliente confira a validade dos certificados.</span>

- ***CEPO171124239914-chain.crt***

 <span style="font-weight: 400;">Arquivo inclui a cadeia de certificados que inclui o do ICPEdu, os da Globalsign, e o certificado gerado para o dispositivo final ou aplicação. É ele que será apresentado aos navegadores dos usuários.</span>

- ***CEPO171124239914.key***

<span style="font-weight: 400;">Arquivo inclui a chave privada do certificado gerado para o dispositivo final ou aplicação. Ele será usada para compor o fluxo criptografado, juntamente com o certificado, aos navegadores dos usuários.</span>

<span style="font-weight: 400;">A seguir estão instruções de como utilizar os arquivos gerados nos servidores HTTP Apache e NGinx, instalados nos sistemas operacionais Linux Debian (os comandos são também válidos para Ubuntu) e Centos.</span>

#### <span style="font-weight: 400;">2.1. O diretório dos arquivos</span>

<span style="font-weight: 400;">Para seguir os passos definidos neste documento, copie os arquivos para o diretório “</span>***/etc/ssl/private/***<span style="font-weight: 400;">”.</span>

```shell
[usuario@linux /tmp]$ sudo mkdir -p /etc/ssl/private
[usuario@linux /tmp]$ sudo cp *.crt *.key *.pem *.pfx /etc/ssl/private
```

<p class="callout warning"><span style="font-weight: 400;">Os passos a seguir não funcionarão se os arquivos não estiverem no diretório “/etc/ssl/private/”.</span></p>

#### <span style="font-weight: 400;">2.2. Configuração com Apache</span>

<p class="callout info"><span style="font-weight: 400;">Por padrão, os arquivos de configuração dos sites do Apache **no Debian e Ubuntu ficam localizados em “**</span>***/etc/apache2/sites-available/*"** *.* Caso esteja instalado **no Centos, ficam em** <span style="font-weight: 400;">**“*/etc/httpd/conf.d*”**  
</span></p>

<span style="font-weight: 400;">No arquivo de cada host, dentro da sessão “</span>*<span style="font-weight: 400;">&lt;VirtualHost&gt;</span>*<span style="font-weight: 400;">” </span><span style="font-weight: 400; color: #ff0000;">onde o SSL esteja habilitado </span><span style="font-weight: 400;">inclua as definições de modo que se pareça com o que é mostrado a seguir:</span>

<p class="callout info"><span style="font-weight: 400;">Para identificar qual VirtualHost possui SSL habilitado, observe se uma linha com o conteúdo "***SSLEngine On***" existe</span></p>

<span style="font-weight: 400;">***Caso a versão do apache seja inferior a 2.3.6*  
</span>

```shell
<VirtualHost <server_name>:443>
  Listen 443
  SSLEngine on
  ServerName <server_name>:443
  ...

  # Certificados
  SSLCertificateFile /etc/ssl/private/CEPO171124239914-chain.crt
  SSLCACertificateFile /etc/ssl/private/globalsign-ca.crt
  SSLCertificateKeyFile /etc/ssl/private/CEPO171124239914.key
  SSLCertificateChainFile /etc/ssl/private/icpedu-chain.crt
  ...
</VirtualHost> 
```

<span style="font-weight: 400;">***Caso a versão do apache seja superior a 2.3.6 e inferior a 2.4.8*   
</span>

```shell
<VirtualHost <server_name>:443>
  Listen 443
  SSLEngine on
  ServerName <server_name>:443
  ...
  # OCSP Stappling
  SSLUseStapling On
  SSLStaplingCache "shmcb:/tmp/stapling-cache(150000)"

  # Certificados
  SSLCertificateFile /etc/ssl/private/CEPO171124239914-chain.crt
  SSLCACertificateFile /etc/ssl/private/globalsign-ca.crt
  SSLCertificateKeyFile /etc/ssl/private/CEPO171124239914.key
  SSLCertificateChainFile /etc/ssl/private/icpedu-chain.crt
  ...
</VirtualHost> 
```

<span style="font-weight: 400;">***Caso a versão do apache seja a 2.4.8 ou superior***</span>

<span style="font-weight: 400;">No arquivo de cada host, dentro da sessão “</span>*<span style="font-weight: 400;">&lt;VirtualHost&gt;</span>*<span style="font-weight: 400;">” </span><span style="font-weight: 400; color: #ff0000;">onde o SSL esteja habilitado </span><span style="font-weight: 400;">inclua as definições (da linha 6 até a 14) de modo que se pareça com o que é mostrado a seguir:</span>

```shell
<VirtualHost <server_name>:443>
  Listen 443
  SSLEngine on
  ServerName <server_name>:443
  ...
  # OCSP Stappling
  SSLUseStapling On
  SSLStaplingCache "shmcb:/tmp/stapling-cache(150000)"

  # Certificados
  SSLOpenSSLConfCmd DHParameters /etc/ssl/private/dh-4096.pem
  SSLCACertificateFile /etc/ssl/private/globalsign-ca.crt
  SSLCertificateFile /etc/ssl/private/CEPO171124239914-chain.crt
  SSLCertificateKeyFile /etc/ssl/private/CEPO171124239914.key
  ...
</VirtualHost>
```

 <span style="font-weight: 400;">Após realizar a configuração mostrada é preciso aplicar as alterações. </span>

<span style="font-weight: 400;">Procure por erros de configuração:</span><span style="font-weight: 400;">  
</span>`<span style="font-weight: 400;">[usuario@linux ~]$ sudo apache2ctl -t</span>`<span style="font-weight: 400;">  
</span>

<span style="font-weight: 400;">Se tudo correu bem, reinicie o serviço (no Debian/Ubuntu/Centos):</span><span style="font-weight: 400;">  
</span>`<span style="font-weight: 400;">[usuario@linux ~]$ sudo apache2ctl -k restart</span>`

<p class="callout warning"><span style="font-weight: 400;">Para que as alterações entrem em vigor é necessário reiniciar o serviço  
</span></p>

#### <span style="font-weight: 400;">2.3. Configuração com NGinx</span>

<p class="callout warning">Utilize o comando **nginx -v** para saber a versão do nginx atualmente instalada. **Para este documento, é necessário que versão seja igual ou superior a 1.3.7.** </p>

<p class="callout info"><span style="font-weight: 400;">Por padrão, os arquivos de configuração dos sites do **NGinx no Debian e Ubuntu ficam localizados em “*/etc/nginx/sites-available/*"** *.* Caso esteja instalado **no Centos, ficam em “*/etc/nginx/conf.d*”**</span></p>

<span style="font-weight: 400;">No arquivo de cada host, na sessão “*server*” <span style="font-weight: 400; color: #ff0000;">onde o SSL esteja habilitado</span> inclua as definições (da linha 4 até a 13) de modo que se pareça com o que é mostrado a seguir:  
</span>

<p class="callout info"><span style="font-weight: 400;">Para identificar qual VirtualHost possui SSL habilitado, observe se uma linha com o conteúdo "***listen 443 ssl***" existe</span></p>

```shell
server {
  listen 443 ssl;
  ...
  # OCSP Stappling
  ssl_stapling on;
  ssl_stapling_verify on; 
  resolver 208.67.220.220 208.67.222.222 valid=600s;

  # Certificados
  ssl_dhparam /etc/ssl/private/dh-4096.pem;
  ssl_certificate /etc/ssl/private/CEPO171124239914-chain.crt;
  ssl_certificate_key /etc/ssl/private/CEPO171124239914.key;
  ssl_trusted_certificate /etc/ssl/private/icpedu-chain.crt;
  ...
}
```

 <span style="font-weight: 400;">Após realizar a configuração mostrada é preciso aplicar as alterações. </span>

<span style="font-weight: 400;">Procure por erros de configuração:</span><span style="font-weight: 400;">  
</span>`<span style="font-weight: 400;">[usuario@linux ~]$ sudo nginx -t</span>`<span style="font-weight: 400;">  
</span>

<span style="font-weight: 400;">Se tudo correu bem, reinicie o serviço (no Debian/Ubuntu e Centos):</span><span style="font-weight: 400;">  
</span>`<span style="font-weight: 400;">[usuario@linux ~]$ sudo nginx -s reload</span>`

<p class="callout warning"><span style="font-weight: 400;">Para que as alterações entrem em vigor é necessário reiniciar o serviço  
</span></p>

#### 2.4 Outros sistemas

Caso haja a necessidade de instalar o certificado em outros oftwares (como MS IIS, MS Exchange e CPanel), acesse a documentação de instalação disponibilizada pela Globalsign [clicando neste link.](https://support.globalsign.com/#category_SSL_Installation)