Para que los programas no se quejen cuando se les presenta un certificado firmado por una CA privada, es necesario instalar el certificado de dicha entidad en los mismos programas para que estos reconozcan a dicha CA.
Tabla de Contenidos
Browsers y otros clientes
CAcert que es una Autoridad de Certificación que extiende certificados gratuitos tiene información en su wiki acerca de como se configura su propio certificado en navegadores y otros clientes y en distintas plataformas.
openssl en Debian/Ubuntu
En Debian y Ubuntu hay que tener el paquete ca-certificates:
sudo apt-get install ca-certificates
luego hacer lo siguiente:
Supongamos que tenemos el certificado de la CA en un archivo myCA-cert.crt (la extensión tiene que ser .crt):
# variables de entorno
export CACERT="myCA-cert.crt"
export CACERT_DIR="/usr/share/ca-certificates"
# creamos (si no existía) un subdirectorio para nuestros certificados locales
sudo mkdir -pv ${CACERT_DIR}/LOCAL
# copiamos el certificado de la CA allí
sudo cp -v ${CACERT} ${CACERT_DIR}/LOCAL
# reconfiguramos el paquete ca-certificates para que incorpore el (los) certificados nuevos
sudo dpkg-reconfigure ca-certificatesEsto nos va a mostrar una pantalla como la siguiente:
preguntándonos si queremos confiar en nuevos certificados.
Para mayor seguridad, contestamos ask para que nos muestre un listado de los certificados y nos de a elegir:
Allí aparece nuestro nuevo certificado ([ ] LOCAL/myCA-cert.crt) sin seleccionar.
Lo seleccionamos: ([*] LOCAL/myCA-cert.crt)
damos <OK> y aparecerá el siguiente mensaje:
Updating certificates in /etc/ssl/certs....done.
a partir de este momento, debería reconocer la CA privada al igual que todas las demás.
Subversion
Editar el archivo /etc/subversion/servers (aunque se llama servers, también lo usa el cliente) y agregarle al final:
ssl-authority-files = /etc/ssl/certs/myCA-cert.pem
Si acabamos de configurarlo como se indica arriba, podemos hacer lo siguiente:
CACERT_BASE=`basename ${CACERT} .crt`
PEMFILE=/etc/ssl/certs/${CACERT_BASE}.pem
SVNCONFIG=/etc/subversion/servers
TMPCONFIG=/tmp/svn.servers.$$
TMPFILE=/tmp/svn.ssl.$$
# buscamos la línea ssl-authority-files (si existe, si no la creamos vacía)
if ! grep '^ *ssl-authority-files *=' ${SVNCONFIG} > ${TMPFILE} ; then
echo "ssl-authority-files =" > ${TMPFILE}
fi
# ponemos el resto del archivo (todo menos esa línea) en otro archivo temporario:
grep -v '^ *ssl-authority-files *=' ${SVNCONFIG} > ${TMPCONFIG}
# le agregamos el nuevo archivo a la línea que teníamos o generamos
sed -i.ORI -e "s:$: ${PEMFILE}:" ${TMPFILE}
# la agregamos al final del archivo de configuración de subversion
sudo sh -c "cat ${TMPCONFIG} ${TMPFILE} > ${SVNCONFIG}"