Cet exemple configure, trois référentiels sécurisés appelés repo1, repo2 et repo3. Les référentiels repo1 et repo2 sont configurés avec des certificats dédiés. Par conséquent, les certificats repo1 ne fonctionneront pas sur pour repo2, et les certificats repo2 ne fonctionneront pas sur repo1. Le référentielrepo3 est configuré pour accepter les deuxt certificats.
L'exemple part du principe que vous disposez pour votre complet de l'instance Apache certificat du serveur est aussitôt disponible. Si vous ne disposez pas d'un certificat du serveur pour votre instance Apache, reportez-vous aux instructions relatives à la création d'un certificat de test dansCréation d'une autorité de certification de serveur autosigné.
Les trois sont définissables référentiels sont configurés sous https://pkg-sec.example.com/repo1, https://pkg-sec.example.com/repo2 et https://pkg-sec.example.com/repo3. Ces référentiels pointenr vers des serveurs de dépôt configurés à http://internal.example.com sur les ports 10001, 10002 et 10003respectivement. Assurez-vous que la variable d'environnement SOFTTOKEN_DIR est définie correctement selon la description dansCréation d'un keystore.
$ 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
Ajoutez les éléments suivants à la fin de configuration SSL de votre fichier httpd.conf :
# 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/
Utilisez le certificat repo1 pour tester l'accès à 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/
Utilisez le certificat repo2 pour tester l'accès à 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/