최근에 저는 회사의 적절한 저장소에 문제가 생겼습니다. 문제는 표준 http 전송을 사용하면 다른 사람이 쉽게 패키지를 얻을 수 있다는 것입니다. 회사가 자체 소유 소프트웨어를 패키징하고 모든 사람과 공유하고 싶지 않기 때문에 http 전송이 문제가됩니다. 비극이 아니라 문제입니다. ssh를 전송으로 사용하여 패키지에 대한 액세스를 제한하는 방법 (방화벽, 웹 서버 수준의 액세스 제한)에는 몇 가지 방법이 있습니다. 이 주제에 대한 독서를 매우 쉽게 읽을 수 있습니다 : 개인 데비안 리포지토리에 대한 액세스 제한
이 경우 https 전송 + 클라이언트 인증서 인증을 사용하기로 결정했습니다. 간단히 말하면 다음과 같습니다.
- 자체 서명 된 인증서, 클라이언트 및 서버 준비 (easy-rsa 사용)
https 만 수락하도록 저장소를 앞면으로하는 웹 서버를 구성하십시오. nginx의 경우 다음과 같이 보일 수 있습니다.
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;
}
}
클라이언트 인증서, 클라이언트 키 및 ca 인증서를 / etc / apt / ssl에 넣고 우분투의 경우 00https 파일을 /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";
};
자체 서명 인증서를 사용하는 경우 호스트 확인을 끄는 것이 중요합니다. Verify-Host "false";
이 작업을 수행하지 않으면 오류가 발생합니다.
SSL: certificate subject name (blah-blah-blah) does not match target host name 'example.com'
이제 우리는 저장소에 대한 더 이상 무단 액세스가 없습니다. 따라서 이것은 매우 유용하고 강력한 것입니다.