이 예에서는 repo1, repo2 및 repo3이라는 세 개의 보안 저장소를 구성합니다. repo1 및 repo2 저장소는 전용 인증서로 구성됩니다. 따라서 repo1에 대한 인증서는 repo2에서 작동하지 않고 repo2에 대한 인증서는 repo1에서 작동하지 않습니다. repo3 저장소는 두 인증서 중 하나를 허용하도록 구성됩니다.
이 예에서는 Apache 인스턴스에 적합한 서버 인증서를 이미 사용할 수 있다고 가정합니다. Apache 인스턴스에 대한 서버 인증서가 없는 경우 자체 서명된 서버 인증 기관 만들기에서 테스트 인증서 만들기 지침을 참조하십시오.
https://pkg-sec.example.com/repo1, https://pkg-sec.example.com/repo2 및 https://pkg-sec.example.com/repo3 아래에 세 개의 저장소가 설정됩니다. 이러한 저장소는 http://internal.example.com의 포트 10001, 10002 및 10003에 각각 설정된 저장소 서버를 가리킵니다. 키 저장소 만들기의 설명에 따라 SOFTTOKEN_DIR 환경 변수가 올바르게 설정되었는지 확인합니다.
$ pktool gencert label=repo1_ca subject="CN=repo1" serial=0x01 $ pktool export objtype=cert label=repo1_ca outformat=pem \ outfile=repo1_ca.pem
$ pktool gencert label=repo2_ca subject="CN=repo2" serial=0x01 $ pktool export objtype=cert label=repo2_ca outformat=pem \ outfile=repo2_ca.pem
$ cat repo1_ca.pem > repo_cas.pem $ cat repo2_ca.pem >> repo_cas.pem $ cp repo_cas.pem /path-to-certs
$ pktool gencsr subject="C=US,CN=myuser" label=repo1_0001 format=pem \ outcsr=repo1_myuser.csr $ pktool signcsr signkey=repo1_ca csr=repo1_myuser.csr \ serial=0x02 outcert=repo1_myuser.crt.pem issuer="CN=repo1" $ pktool export objtype=key label=repo1_0001 outformat=pem \ outfile=repo1_myuser.key.pem $ cp repo1_myuser.key.pem /path-to-certs $ cp repo1_myuser.crt.pem /path-to-certs
$ pktool gencsr subject="C=US,CN=myuser" label=repo2_0001 format=pem \ outcsr=repo2_myuser.csr $ pktool signcsr signkey=repo2_ca csr=repo2_myuser.csr \ serial=0x02 outcert=repo2_myuser.crt.pem issuer="CN=repo2" $ pktool export objtype=key label=repo2_0001 outformat=pem \ outfile=repo2_myuser.key.pem $ cp repo2_myuser.key.pem /path-to-certs $ cp repo2_myuser.crt.pem /path-to-certs
httpd.conf 파일의 끝에 다음 SSL 구성을 추가합니다.
# Let Apache listen on the standard HTTPS port Listen 443 <VirtualHost 0.0.0.0:443> # DNS domain name of the server ServerName pkg-sec.example.com # enable SSL SSLEngine On # Location of the server certificate and key. # You either have to get one from a certificate signing authority like # VeriSign or create your own CA for testing purposes (see "Creating a # Self-Signed CA for Testing Purposes") SSLCertificateFile /path/to/server.crt SSLCertificateKeyFile /path/to/server.key # Intermediate CA certificate file. Required if your server certificate # is not signed by a top-level CA directly but an intermediate authority. # Comment out this section if you don't need one or if you are using a # test certificate SSLCertificateChainFile /path/to/ca_intermediate.pem # CA certs for client verification. # This is where the CA certificate created in step 3 needs to go. # If you have multiple CAs for multiple repos, just concatenate the # CA certificate files SSLCACertificateFile /path/to/certs/repo_cas.pem # If the client presents a certificate, verify it here. If it doesn't, # ignore. # This is required to be able to use client-certificate based and # anonymous SSL traffic on the same VirtualHost. SSLVerifyClient optional <Location /repo1> SSLVerifyDepth 1 SSLRequire ( %{SSL_CLIENT_I_DN_CN} =~ m/repo1/ ) # proxy request to depot running at internal.example.com:10001 ProxyPass http://internal.example.com:10001 nocanon max=500 </Location> <Location /repo2> SSLVerifyDepth 1 SSLRequire ( %{SSL_CLIENT_I_DN_CN} =~ m/repo2/ ) # proxy request to depot running at internal.example.com:10002 ProxyPass http://internal.example.com:10002 nocanon max=500 </Location> <Location /repo3> SSLVerifyDepth 1 SSLRequire ( %{SSL_CLIENT_VERIFY} eq "SUCCESS" ) # proxy request to depot running at internal.example.com:10003 ProxyPass http://internal.example.com:10003 nocanon max=500 </Location> </VirtualHost>
$ pkg set-publisher -k /path-to-certs/repo1_myuser.key.pem \ -c /path-to-certs/repo1_myuser.crt.pem \ -p https://pkg-sec.example.com/repo1/
$ pkg set-publisher -k /path-to-certs/repo2_myuser.key.pem \ -c /path-to-certs/repo2_myuser.crt.pem \ -p https://pkg-sec.example.com/repo2/
repo1 인증서를 사용하여 repo3에 대한 액세스를 테스트합니다.
$ pkg set-publisher -k /path-to-certs/repo1_myuser.key.pem \ -c /path-to-certs/repo1_myuser.crt.pem \ -p https://pkg-sec.example.com/repo3/
repo2 인증서를 사용하여 repo3에 대한 액세스를 테스트합니다.
$ pkg set-publisher -k /path-to-certs/repo2_myuser.key.pem \ -c /path-to-certs/repo2_myuser.crt.pem \ -p https://pkg-sec.example.com/repo3/