Recentemente, descobri o problema com o repositório apt da minha empresa. O problema é que, se usarmos o padrão de transporte http, qualquer outra pessoa pode obter o pacote facilmente. Como a empresa está empacotando seu próprio software proprietário e não quer compartilhá-lo com todos, o transporte http se torna um problema. Não é uma tragédia, mas um problema. Há algumas maneiras de limitar o acesso ao pacote - firewall, restringindo o acesso no nível do servidor da Web, usando o ssh como um transporte. Muito fácil de consumir lendo sobre este tópico pode ser encontrado aqui: Restringir o acesso ao seu repositório privado Debian
No nosso caso, decidimos usar autenticação de transporte https + certificado de cliente. Resumidamente, basta:
- Prepare certificados, cliente e servidor autoassinados (usando o easy-rsa);
-
Configure o servidor da web que faz frente ao repositório para aceitar apenas https;
No caso do nginx, pode parecer:
server {
listen 443;
root /path/to/public;
server_name secure_repo;
ssl on;
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
ssl_session_timeout 5m;
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv3:;
ssl_prefer_server_ciphers on;
ssl_client_certificate /etc/nginx/ssl/ca.crt;
ssl_verify_client on;
location / {
autoindex on;
}
}
-
Coloque o certificado do cliente, a chave do cliente e o certificado ca em /etc/apt/ssl e, no caso do Ubuntu, adicione o arquivo 00https ao /etc/apt/apt.conf.d:
Debug::Acquire::https "true";
Acquire::https::example.com {
Verify-Peer "true";
Verify-Host "false";
CaInfo "/etc/apt/ssl/ca.crt";
SslCert "/etc/apt/ssl/client.crt";
SslKey "/etc/apt/ssl/client.key";
};
Lembre-se de que, se você estiver usando um certificado autoassinado, é importante desativar a verificação do host: Verify-Host "false";
Se você não fizer isso, verá um erro:
SSL: certificate subject name (blah-blah-blah) does not match target host name 'example.com'
E aqui vamos nós, não há mais acesso não autorizado ao repositório. Então isso é uma coisa bastante útil e poderosa.