Cliente MAC OS X VPN / Certificados / Serie Cisco ASA

Pasé mucho tiempo navegando por la web en busca de la solución, pero, por desgracia, finalmente llegué a la conclusión de que este podría ser un tema interesante para descubrir.

Aquí está la tarea:

1. Necesito establecer una conexión VPN desde MAC OS X (preferiblemente cliente IPSec incorporado) a Cisco ASA 5500 remoto.

2. Lo que tengo: dos certificados, uno para el cifrado de la conexión VPN y otro para el inicio de sesión en el escritorio remoto. Ambos almacenados en eToken.

El problema está en la configuración de la conexión: en el sitio web oficial de Cisco hay un comentario sobre los clientes vpn compatibles y parece que el cliente IPSec incorporado de mac os x es adecuado. Además, para ASA 5500 es adecuado tanto en modo "l2tp sobre ipsec" como "Cisco IPSec". Ahora, intentemos establecer "Cisco IPSec" (configuración>red>agregar conexión). Tengo la dirección del host, el nombre de la cuenta y la contraseña, y estoy seguro de que es correcto porque lo verifiqué en Win7.

Lo más interesante está en "Configuración de autenticación": aquí, se supone que debo elegir un certificado, pero mi llavero informa que no hay certificados adecuados en mi llavero.

Y la razón de eso podría estar en el "tipo" de certificados. Todos los certificados que tengo están identificados por OS X como un certificados de usuario por lo que no se puede utilizar para autorizar la máquina (por cierto, ¿es correcto?).

Bien, si probamos el l2tp sobre IPSec hay el mismo problema: puedo incluso elegir un certificado de usuario de eToken, pero todavía no tengo certificado de máquina.

Así es como suele verse en Windows:

  1. Ejecute el cliente VPN de Cisco

  2. Configure la dirección del host, luego elija el certificado (que se puede elegir de alguna manera :))

  3. Toque conectar, ingrese el pin para eToken y estará conectado

Entonces, ¿cómo configurar una conexión si:

1. eToken es bastante visible con sus certificados incluso para el cliente IPsec nativo.

2. Hay un Cisco Asa 5500 en el otro extremo.

O me encantaría recibir una pista o un enlace donde pueda encontrar una descripción sobre las características de vpn de cisco...

Sistema: OS X Lion 10.7.4, eToken SafeNet Authentication Client 8.0.

Si alguien conoce una decisión para diferentes clientes, será bueno verla aquí.

¡Gracias de antemano!

preguntado el 22 de mayo de 12 a las 20:05

Probablemente encontrará personas más adecuadas para responder esto en ServerFault. -

Sí, creo que debería :) Todo esto surgió de un problema de programación, por lo que apenas entendí en el momento de la publicación que en realidad no lo es (en el contexto actual). -

1 Respuestas

La Autoridad de certificación se administra a través de OpenSSL y actualmente reside en el servidor 497398 (appdr.Company.com).

La estructura del directorio de CA está en /etc/pki/CA/

El archivo de configuración de OpenSSL se encuentra en /etc/pki/tls/openssl.cnf

La entrada de configuración más importante en el archivo openssl.cnf es la línea:

subjectAltName = DNS:primary-vpn.Company.com,DNS:backup-vpn.Company.com

Esta línea REQUIERE espacios alrededor del signo =.

Si el cliente alguna vez elige agregar otro dispositivo de firewall, esta línea deberá actualizarse con ese FQDN en otro DNS: la entrada y todas las claves deberán volver a crearse y volverse a emitir a los usuarios.

Los cortafuegos en la cuenta del cliente en DFW y ORD están configurados para autenticarse a través de autenticación de dos etapas utilizando certificados, así como nombre de usuario/contraseñas.

Usamos certificados que generamos en la CA y distribuimos a los clientes. Cada cortafuegos también requiere su propio certificado en formato PFX, así como una copia del certificado CA con formato PEM. Los certificados PFX para los dispositivos de firewall NO DEBEN incluir el certificado CA. ¡El certificado de CA debe importarse por separado al firewall en formato PEM! Este certificado de CA se convierte en un punto de confianza en el cortafuegos.

Los cortafuegos también incluyen autenticación básica de nombre de usuario/contraseña que se configura en el propio dispositivo.

Las contraseñas de la clave del certificado del cortafuegos están documentadas con los propios dispositivos en las Notas de contraseña.

Se requiere que los clientes se conecten al nombre DNS para cada firewall y debe (a partir del 05/31/2013) ser principal-vpn.Company.com o backup-vpn.Company.com. No se admite la conexión a través de la dirección IP, ya que los certificados no incluyen el subjectAltName para las direcciones IP. Esto es para admitir cualquier cambio de IP futuro sin tener que volver a teclear todos los clientes y dispositivos.

Cada usuario requiere que se genere una clave y un certificado separados usando openssl y la clave CA. La contraseña de la clave de CA está documentada en el Dispositivo 497398 (appdr) en Notas de contraseña.

Necesitará la contraseña de la clave de CA para el proceso de creación del certificado a continuación (openssl ca ...)


Cómo agregar nuevos usuarios...

En el servidor CA:

  • Cambiar al directorio de OpenSSL CA

    cd /etc/pki/CA

  • Generar clave

    openssl genrsa 2048 -out > nombre de usuario.Companyvpn.key

  • Generar CSR

    openssl req -new -key nombre de usuario.Companyvpn.key -out nombre de usuario.Companyvpn.csr (OU = nombre de usuario) (Nombre común = nombre de usuario) (Sin contraseña)

  • Generar certificado openssl ca -policy policy_anything -out username.Companyvpn.crt -infiles username.Companyvpn.csr (Sí para firmar el certificado)

  • Generar nueva contraseña aleatoria (12 caracteres) echo </dev/urandom tr -dc 'a-zA-Z0-9'| head -c12

  • Crear certificado PFX/archivo clave openssl pkcs12 -exportar -out nombre de usuario.Companyvpn.pfx -inkey nombre de usuario.Companyvpn.key -in nombre de usuario.Companyvpn.crt -certfile /etc/pki/CA/certs/CompanyCA.crt (Ingrese la contraseña aleatoria que acaba de generar)

  • Verifique el certificado con este comando openssl x509 -in username.Companyvpn.crt -text -noout

  • Busque la fecha de caducidad, debe ser de un año.

  • También busque la línea:
  • Nombre alternativo del sujeto X509v3
  • Si no ve la línea Nombre alternativo del asunto -- DETENER -- ¡algo puede estar mal con el archivo openssl.cnf!
  • Póngase en contacto con un administrador de nivel superior para obtener ayuda

  • Distribuya el nuevo archivo PFX adjuntándolo al ticket del cliente y proporcióneles la contraseña.

    Cómo crear un certificado/clave de dispositivo...

    En el servidor CA:

    • Cambie al directorio OpenSSL CA cd /etc/pki/CA

    • Generar clave para el propio dispositivo FW openssl genrsa 1024 > backup-vpn.Company.com.key

    • Genere CSR para el dispositivo FW en sí mismo openssl req -new -key backup-vpn.Company.com.key -out backup-vpn.Company.com.csr (OU es Kimbia Certificate) (Nombre común backup-vpn.Company.com) ( Sin contraseña)

    • Generar certificado de CSR para dispositivo FW openssl ca -days 3650 -in backup-vpn.Company.com.csr -out backup-vpn.Company.com.crt

    • Crear PFX para dispositivo FW (sin certificado CA incluido) openssl pkcs12 -exportar -out backup-vpn.Company.com.pfx -inkey backup-vpn.Company.com.key -in backup-vpn.Company.com.crt (Usar 'rack' para exportar la frase de contraseña o generar una aleatoria)

    • Base64 codifica el archivo PFX para que NetSec lo incluya en ASA, ya que el dispositivo Cisco lo requiere

    • Distribuya el archivo PFX codificado en Base64 al equipo de NetSec

    • Distribuir /etc/pki/CA/certs/CompanyCA.crt con codificación PEM al equipo de NetSec

    Dios no lo quiera, si tiene que regenerar el certificado y la clave de CA, este es el proceso...

    • Cambie el directorio a CA cd /etc/pki/CA

    • Genere la clave openssl genrsa -out /etc/pki/CA/private/CompanyCA.key -des3 2048

    • Genere el certificado openssl req -new -x509 -key /etc/pki/CA/private/CompanyCA.key -days 3650 > /etc/pki/CA/certs/CompanyCA.crt

    • Ahora debe volver a generar todas las claves y certificados de dispositivo, reconfigurar todos los dispositivos y volver a generar todas las claves y certificados de usuario de acuerdo con las instrucciones anteriores.

    • Hemos establecido la caducidad de los conjuntos de CA/dispositivos actuales para 2023 para tratar de evitar tener que hacerlo todo de nuevo.

    Para revocar un certificado en particular y deshabilitar un usuario...

    En el servidor CA:

    • Cambie el directorio a CA cd /etc/pki/CA

    • Revocar certificado openssl ca -revocar nombre de usuario.Companyvpn.crt

    • Haga que NetSec elimine el nombre de usuario y las entradas del grupo de túneles del cortafuegos.

    Aquí está el /etc/pki/tls/openssl.cnf actual al 05/31/2013

    #
    # OpenSSL example configuration file.
    # This is mostly being used for generation of certificate requests.
    #
    
    # This definition stops the following lines choking if HOME isn't
    # defined.
    HOME            = .
    RANDFILE        = $ENV::HOME/.rnd
    
    # Extra OBJECT IDENTIFIER info:
    #oid_file       = $ENV::HOME/.oid
    oid_section     = new_oids
    
    # To use this configuration file with the "-extfile" option of the
    # "openssl x509" utility, name here the section containing the
    # X.509v3 extensions to use:
    
    #extensions     = v3_req,v3_ca
    
    # (Alternatively, use a configuration file that has only
    # X.509v3 extensions in its main [= default] section.)
    
    [ new_oids ]
    
    # We can add new OIDs in here for use by 'ca', 'req' and 'ts'.
    # Add a simple OID like this:
    # testoid1=1.2.3.4
    # Or use config file substitution like this:
    # testoid2=${testoid1}.5.6
    
    # Policies used by the TSA examples.
    tsa_policy1 = 1.2.3.4.1
    tsa_policy2 = 1.2.3.4.5.6
    tsa_policy3 = 1.2.3.4.5.7
    
    ####################################################################
    [ ca ]
    default_ca  = CA_default        # The default ca section
    
    ####################################################################
    [ CA_default ]
    
    dir     = /etc/pki/CA       # Where everything is kept
    certs       = $dir/certs        # Where the issued certs are kept
    crl_dir     = $dir/crl      # Where the issued crl are kept
    database    = $dir/index.txt    # database index file.
    #unique_subject = no            # Set to 'no' to allow creation of
                        # several ctificates with same subject.
    new_certs_dir   = $dir/newcerts     # default place for new certs.
    
    certificate = $certs/CompanyCA.crt  # The CA certificate
    serial      = $dir/serial       # The current serial number
    crlnumber   = $dir/crlnumber    # the current crl number
                        # must be commented out to leave a V1 CRL
    crl     = $dir/crl.pem      # The current CRL
    private_key = $dir/private/CompanyCA.key # The private key
    RANDFILE    = $dir/private/.rand    # private random number file
    
    x509_extensions = usr_cert      # The extentions to add to the cert
    
    # Comment out the following two lines for the "traditional"
    # (and highly broken) format.
    name_opt    = ca_default        # Subject Name options
    cert_opt    = ca_default        # Certificate field options
    
    # Extension copying option: use with caution.
    # copy_extensions = copy
    
    # Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs
    # so this is commented out by default to leave a V1 CRL.
    # crlnumber must also be commented out to leave a V1 CRL.
    # crl_extensions    = crl_ext
    
    default_days    = 365           # how long to certify for
    default_crl_days= 30            # how long before next CRL
    default_md  = default       # use public key default MD
    preserve    = no            # keep passed DN ordering
    
    # A few difference way of specifying how similar the request should look
    # For type CA, the listed attributes must be the same, and the optional
    # and supplied fields are just that :-)
    policy      = policy_match
    
    # For the CA policy
    [ policy_match ]
    countryName     = match
    stateOrProvinceName = match
    organizationName    = match
    organizationalUnitName  = optional
    commonName      = supplied
    emailAddress        = optional
    
    # For the 'anything' policy
    # At this point in time, you must list all acceptable 'object'
    # types.
    [ policy_anything ]
    countryName     = optional
    stateOrProvinceName = optional
    localityName        = optional
    organizationName    = optional
    organizationalUnitName  = optional
    commonName      = supplied
    emailAddress        = optional
    
    ####################################################################
    [ req ]
    default_bits        = 2048
    default_md      = sha1
    default_keyfile     = privkey.pem
    distinguished_name  = req_distinguished_name
    attributes      = req_attributes
    x509_extensions = v3_ca # The extentions to add to the self signed cert
    
    # Passwords for private keys if not present they will be prompted for
    # input_password = secret
    # output_password = secret
    
    # This sets a mask for permitted string types. There are several options. 
    # default: PrintableString, T61String, BMPString.
    # pkix   : PrintableString, BMPString (PKIX recommendation before 2004)
    # utf8only: only UTF8Strings (PKIX recommendation after 2004).
    # nombstr : PrintableString, T61String (no BMPStrings or UTF8Strings).
    # MASK:XXXX a literal mask value.
    # WARNING: ancient versions of Netscape crash on BMPStrings or UTF8Strings.
    string_mask = utf8only
    
    req_extensions = v3_req # The extensions to add to a certificate request
    
    [ req_distinguished_name ]
    countryName         = Country Name (2 letter code)
    countryName_default     = US
    countryName_min         = 2
    countryName_max         = 2
    
    stateOrProvinceName     = State or Province Name (full name)
    stateOrProvinceName_default = Texas
    
    localityName            = Locality Name (eg, city)
    localityName_default    = AmericanCity
    
    0.organizationName      = Organization Name (eg, company)
    0.organizationName_default  = Software Company Inc
    
    # we can do this but it is not needed normally :-)
    #1.organizationName     = Second Organization Name (eg, company)
    #1.organizationName_default = World Wide Web Pty Ltd
    
    organizationalUnitName      = Organizational Unit Name (eg, section)
    #organizationalUnitName_default = Software Company Certificate
    
    commonName          = Common Name (eg, your name or your server\'s hostname)
    commonName_max          = 64
    
    emailAddress            = Email Address
    emailAddress_max        = 64
    
    # SET-ex3           = SET extension number 3
    
    [ req_attributes ]
    challengePassword       = A challenge password
    challengePassword_min       = 4
    challengePassword_max       = 20
    
    unstructuredName        = An optional company name
    
    [ usr_cert ]
    
    # These extensions are added when 'ca' signs a request.
    
    # This goes against PKIX guidelines but some CAs do it and some software
    # requires this to avoid interpreting an end user certificate as a CA.
    
    basicConstraints=CA:FALSE
    
    # Here are some examples of the usage of nsCertType. If it is omitted
    # the certificate can be used for anything *except* object signing.
    
    # This is OK for an SSL server.
    # nsCertType            = server
    
    # For an object signing certificate this would be used.
    # nsCertType = objsign
    
    # For normal client use this is typical
    # nsCertType = client, email
    
    # and for everything including object signing:
    # nsCertType = client, email, objsign
    
    # This is typical in keyUsage for a client certificate.
    # keyUsage = nonRepudiation, digitalSignature, keyEncipherment
    
    # This will be displayed in Netscape's comment listbox.
    nsComment           = "OpenSSL Generated Certificate"
    
    # PKIX recommendations harmless if included in all certificates.
    subjectKeyIdentifier=hash
    authorityKeyIdentifier=keyid,issuer
    
    # This stuff is for subjectAltName and issuerAltname.
    # Import the email address.
    # subjectAltName=email:copy
    # An alternative to produce certificates that aren't
    # deprecated according to PKIX.
    # subjectAltName=email:move
    
    # Copy subject details
    # issuerAltName=issuer:copy
    
    #nsCaRevocationUrl      = http://www.domain.dom/ca-crl.pem
    #nsBaseUrl
    #nsRevocationUrl
    #nsRenewalUrl
    #nsCaPolicyUrl
    #nsSslServerName
    
    # This is required for TSA certificates.
    # extendedKeyUsage = critical,timeStamping
    
    subjectAltName = DNS:primary-vpn.Company.com,DNS:backup-vpn.Company.com
    
    [ v3_req ]
    
    # Extensions to add to a certificate request
    
    basicConstraints = CA:FALSE
    keyUsage = nonRepudiation, digitalSignature, keyEncipherment
    
    #subjectAltName = DNS:primary-vpn.Company.com
    #subjectAltName = IP:122.123.321.221
    
    #subjectAltName=IP:221.321.123.122,DNS:backup-vpn.Company.com
    #subjectAltName=IP:122.123.321.221,DNS:primary-vpn.Company.com
    # Changing from IP+DNS to just DNS to mitigate future IP change issues
    # Added quotes 130530-07939
    
    
    [ v3_ca ]
    
    
    # Extensions for a typical CA
    
    
    # PKIX recommendation.
    
    subjectKeyIdentifier=hash
    
    authorityKeyIdentifier=keyid:always,issuer
    
    # This is what PKIX recommends but some broken software chokes on critical
    # extensions.
    #basicConstraints = critical,CA:true
    # So we do this instead.
    basicConstraints = CA:true
    
    # Key usage: this is typical for a CA certificate. However since it will
    # prevent it being used as an test self-signed certificate it is best
    # left out by default.
    # keyUsage = cRLSign, keyCertSign
    
    # Some might want this also
    # nsCertType = sslCA, emailCA
    
    # Include email address in subject alt name: another PKIX recommendation
    # subjectAltName=email:copy
    # Copy issuer details
    # issuerAltName=issuer:copy
    
    # DER hex encoding of an extension: beware experts only!
    # obj=DER:02:03
    # Where 'obj' is a standard or added object
    # You can even override a supported extension:
    # basicConstraints= critical, DER:30:03:01:01:FF
    
    subjectAltName = DNS:primary-vpn.Company.com,DNS:backup-vpn.Company.com
    
    [ crl_ext ]
    
    # CRL extensions.
    # Only issuerAltName and authorityKeyIdentifier make any sense in a CRL.
    
    # issuerAltName=issuer:copy
    authorityKeyIdentifier=keyid:always
    
    [ proxy_cert_ext ]
    # These extensions should be added when creating a proxy certificate
    
    # This goes against PKIX guidelines but some CAs do it and some software
    # requires this to avoid interpreting an end user certificate as a CA.
    
    basicConstraints=CA:FALSE
    
    # Here are some examples of the usage of nsCertType. If it is omitted
    # the certificate can be used for anything *except* object signing.
    
    # This is OK for an SSL server.
    # nsCertType            = server
    
    # For an object signing certificate this would be used.
    # nsCertType = objsign
    
    # For normal client use this is typical
    # nsCertType = client, email
    
    # and for everything including object signing:
    # nsCertType = client, email, objsign
    
    # This is typical in keyUsage for a client certificate.
    # keyUsage = nonRepudiation, digitalSignature, keyEncipherment
    
    # This will be displayed in Netscape's comment listbox.
    nsComment           = "OpenSSL Generated Certificate"
    
    # PKIX recommendations harmless if included in all certificates.
    subjectKeyIdentifier=hash
    authorityKeyIdentifier=keyid,issuer
    
    
    ###################################################
    ###################################################
    
    ###Change the subjectAltName per DC####
    
    # This stuff is for subjectAltName and issuerAltname.
    # Import the email address.
    # subjectAltName=email:copy
    
    # MOVED THIS UNDER [ v3_req ] above
    ##
    #subjectAltName=IP:221.321.123.122,DNS:backup-vpn.Company.com
    #subjectAltName=IP:122.123.321.221,DNS:primary-vpn.Company.com
    # Changing from IP+DNS to just DNS to mitigate future IP change issues
    #subjectAltName="DNS:primary-vpn.Company.com"
    
    
    #####################################################
    #####################################################
    
    # An alternative to produce certificates that aren't
    # deprecated according to PKIX.
    # subjectAltName=email:move
    
    # Copy subject details
    # issuerAltName=issuer:copy
    
    #nsCaRevocationUrl      = http://www.domain.dom/ca-crl.pem
    #nsBaseUrl
    #nsRevocationUrl
    #nsRenewalUrl
    #nsCaPolicyUrl
    #nsSslServerName
    
    # This really needs to be in place for it to be a proxy certificate.
    proxyCertInfo=critical,language:id-ppl-anyLanguage,pathlen:3,policy:foo
    
    ####################################################################
    [ tsa ]
    
    default_tsa = tsa_config1   # the default TSA section
    
    [ tsa_config1 ]
    
    # These are used by the TSA reply generation only.
    dir     = ./demoCA      # TSA root directory
    serial      = $dir/tsaserial    # The current serial number (mandatory)
    crypto_device   = builtin       # OpenSSL engine to use for signing
    signer_cert = $dir/tsacert.pem  # The TSA signing certificate
                        # (optional)
    certs       = $dir/cacert.pem   # Certificate chain to include in reply
                        # (optional)
    signer_key  = $dir/private/tsakey.pem # The TSA private key (optional)
    
    default_policy  = tsa_policy1       # Policy if request did not specify it
                        # (optional)
    other_policies  = tsa_policy2, tsa_policy3  # acceptable policies (optional)
    digests     = md5, sha1     # Acceptable message digests (mandatory)
    accuracy    = secs:1, millisecs:500, microsecs:100  # (optional)
    clock_precision_digits  = 0 # number of digits after dot. (optional)
    ordering        = yes   # Is ordering defined for timestamps?
                    # (optional, default: no)
    tsa_name        = yes   # Must the TSA name be included in the reply?
                    # (optional, default: no)
    ess_cert_id_chain   = no    # Must the ESS cert id chain be included?
                    # (optional, default: no)
    

Respondido el 03 de junio de 13 a las 15:06

KlausS, creo que hiciste una edición sin iniciar sesión. La edición fue sustancial, así que me aseguré de que se llevara a cabo. Si este no eras tú, deberías poder revertirlo. O pídemelo. - ruido ingenuo

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.