首页 文章

MAC OS X VPN客户端/证书/ Cisco ASA系列

提问于
浏览
0

我花了很多时间在网上浏览解决方案,但是唉,所以我最后得出结论,这可能是一个有趣的话题要发现 .

这是任务:

1. I need to establish VPN connection from MAC OS X (preferrably built in IPSec client) to remote Cisco ASA 5500.

2. What I have: two certificates, one for VPN connection cyphering, one for remote desktop login. Both of them stored on eToken.

问题在于 Build 连接:在思科官方网站上有关于支持的vpn客户端的评论,并且在IPSec客户端中内置的mac os x似乎是合适的 . 此外,对于ASA 5500,它适用于“l2tp over ipsec”和“Cisco IPSec”模式 . 现在,让我们尝试 Build “Cisco IPSec”(设置>网络>添加连接) . 我有主机地址,帐户名和密码,我确定它是正确的,因为我在Win7中检查过它 .

The most interesting thing is in "Authentication settings": here, I supposed to choose a certificate, but my Keychain reports, that there are no suitable certificates in my Keychain.

原因可能是"type"的证书 . 我拥有的所有证书都被OS X识别为 user certificates ,因此它不能用于授权机器( by the way, is it right? ) .

好的,如果我们尝试通过IPSec进行l2tp,就会出现同样的问题:我甚至可以从eToken中选择一个用户证书,但我仍然没有机器证书 .

这通常是在Windows中的样子:

  • 运行Cisco VPN客户端

  • 设置主机地址,而不仅仅是选择证书(允许以某种方式选择:))

  • 点击连接,输入eToken的图钉并连接

So how to set up a connection if:

1. eToken is quite visible with its certs even for native IPsec client.

2. There is a cisco asa 5500 on other end.

OR I would be glad for a hint or a link to where I can find any description about cisco vpn features...

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

如果有人知道不同客户的决定 - 很高兴在这里看到它 .

先谢谢!

1 回答

  • 2

    证书颁发机构通过OpenSSL进行管理,目前位于服务器497398(appdr.Company.com)上 .

    CA目录结构位于/ etc / pki / CA /中

    OpenSSL配置文件位于/etc/pki/tls/openssl.cnf

    openssl.cnf文件中最重要的配置条目是:

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

    该行需要=符号周围的空格 .

    如果客户应该选择添加另一个防火墙设备,则需要使用另一个DNS:条目中的该FQDN更新此行,并且必须重新创建所有密钥并将其重新发布给用户 .

    DFW和ORD中客户帐户上的防火墙设置为使用证书以及用户名/密码通过两阶段身份验证进行身份验证 .

    我们使用的是我们在CA上生成并分发给客户端的证书 . 每个防火墙还需要它自己的PFX格式证书以及PEM格式的CA证书的副本 . 防火墙设备的PFX证书不得包含CA证书 . CA证书必须以PEM格式单独导入防火墙!此CA证书成为防火墙上的信任点 .

    防火墙还包括在设备上设置的基本用户名/密码验证 .

    防火墙证书密钥密码与密码备注中的设备本身一起记录 .

    客户端需要连接到每个防火墙的DNS名称,并且必须(截至2013年5月31日)为primary-vpn.Company.com或backup-vpn.Company.com . 不支持通过IP地址连接,因为证书不包含IP地址的subjectAltName . 这是为了支持任何未来的IP更改,而无需重新键入所有客户端和设备 .

    每个用户都需要使用openssl和CA密钥生成单独的密钥和证书 . CA密钥密码记录在密码备注中的设备497398(appdr)下 .

    您将需要以下证书创建过程的CA密钥密码(openssl ca ...)


    如何添加新用户......

    在ca-server上:

    • 切换到OpenSSL CA目录

    cd / etc / pki / CA.

    • 生成密钥

    openssl genrsa 2048 -out> username.Companyvpn.key

    • 生成CSR

    openssl req -new -key username.Companyvpn.key -out username.Companyvpn.csr(OU = username)(Common Name = username)(无密码)

    • 生成证书openssl ca -policy policy_anything -out username.Companyvpn.crt -infiles username.Companyvpn.csr(是签署证书)

    • 生成新的随机密码(12个字符)echo </dev/urandom tr -dc 'a-zA-Z0-9'| head -c12

    • 使PFX证书/密钥存档openssl pkcs12 -export -out username.Companyvpn.pfx -inkey username.Companyvpn.key -in username.Companyvpn.crt -certfile /etc/pki/CA/certs/CompanyCA.crt(输入随机密码你刚刚生成)

    • 使用此命令验证证书openssl x509 -in username.Companyvpn.crt -text -noout

    • 寻找到期日,应该是一年 .

    • 也寻找这条线:

    • X509v3主题替代名称

    • 如果您没有看到主题备用名称行 - 停止 - openssl.cnf文件可能有问题!!

    • 联系上级管理员以获取帮助

    • 通过将新PFX文件附加到客户票证并为其提供密码来分发新PFX文件 .

    如何创建设备证书/密钥......

    在ca-server上:

    • 更改为OpenSSL CA目录cd / etc / pki / CA.

    • 为FW设备生成密钥openssl genrsa 1024> backup-vpn.Company.com.key

    • 为FW设备本身生成CSR openssl req -new -key backup-vpn.Company.com.key -out backup-vpn.Company.com.csr(OU是Kimbia证书)(通用名backup-vpn.Company.com) (没有密码)

    • 从CSR为FW设备生成证书openssl ca -days 3650 -in backup-vpn.Company.com.csr -out backup-vpn.Company.com.crt

    • 为FW设备制作PFX(无捆绑CA证书)openssl pkcs12 -export -out backup-vpn.Company.com.pfx -inkey backup-vpn.Company.com.key -in backup-vpn.Company.com.crt(使用'rack'导出密码或生成随机密码)

    • Base64编码用于NetSec的PFX存档包含在ASA上,因为Cisco设备需要此openssl base64 -in backup-vpn.Company.com.pfx -out backup-vpn.Company.com.pfx.b64

    • 将Base64编码的PFX存档分发给NetSec团队

    • 将PEM编码的/etc/pki/CA/certs/CompanyCA.crt分发给NetSec团队

    天堂禁止,如果你需要重新生成CA证书和密钥,这里是流程......

    • 将目录更改为CA cd / etc / pki / CA.

    • 生成密钥openssl genrsa -out /etc/pki/CA/private/CompanyCA.key -des3 2048

    • 生成证书openssl req -new -x509 -key /etc/pki/CA/private/CompanyCA.key -days 3650> /etc/pki/CA/certs/CompanyCA.crt

    • 您现在必须重新生成所有设备密钥和证书,重新配置所有设备,并根据上述说明重新生成所有用户密钥和证书 .

    • 我们已设置2023的当前CA /设备集的到期时间,以避免再次执行此操作 .

    撤消特定证书并禁用用户...

    在ca-server上:

    • 将目录更改为CA cd / etc / pki / CA.

    • 撤销证书openssl ca -revoke username.Companyvpn.crt

    • 让NetSec从防火墙中删除用户名和隧道组条目 .

    这是当前的/etc/pki/tls/openssl.cnf截至2013年5月31日

    #
    # 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)
    

相关问题