IPSEC VPN between Juniper SRXes using Certificates from CAcert

This is a simple IPSEC VPN that uses PKI for IKE key exchange using certificates from CAcert.org.

VPN using Certificates

To keep things simple, and free, use CAcert as our Certificate Authority.

First, define a new CA on both SRX boxes. For now, the certificate revocation check will be disabled (for simplicities sake).

[edit security pki]
juniper@SRX210-1# show 
ca-profile CACERT {
    ca-identity CAcert;
    revocation-check {
        disable;
    }
}

Download the CAcert class 3 root certificate from https://www.cacert.org/certs/root.crt. Note that these are downloaded on our UNIX box that the SRXes are being configured from.

juniper@unix-box:~$ wget https://www.cacert.org/certs/root.crt
--2013-09-30 11:01:32--  https://www.cacert.org/certs/root.crt
Resolving www.cacert.org (www.cacert.org)... 213.154.225.245, 2001:7b8:3:9c::245
Connecting to www.cacert.org (www.cacert.org)|213.154.225.245|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2569 (2,5K) [application/x-x509-ca-cert]
Saving to: `root.crt'

100%[======================================>] 2.569       --.-K/s   in 0s      

2013-09-30 11:01:33 (90,6 MB/s) - `root.crt' saved [2569/2569]

juniper@unix-box:~$ 

Copy the root cert up to the SRX boxen.

juniper@unix-box:~$ scp root.crt juniper@10.0.110.211:
root.crt                                      100% 2569     2.5KB/s   00:00    
juniper@unix-box:~$ scp root.crt juniper@10.0.110.212:
root.crt                                      100% 2569     2.5KB/s   00:00    

Load the root certificate up into the CA profile that was created ealier. Note that this is done from operational mode on the SRX.

juniper@SRX210-1> request security pki ca-certificate load ca-profile CACERT filename root.crt    
Fingerprint:
  13:5c:ec:36:f4:9c:b8:e9:3b:1a:b2:70:cd:80:88:46:76:ce:8f:33 (sha1)
  a6:1b:37:5e:39:0d:9c:36:54:ee:bd:20:31:46:1f:6b (md5)
Do you want to load this CA certificate ? [yes,no] (no) yes 

CA certificate for profile CACERT loaded successfully

juniper@SRX210-1> show security pki ca-certificate 
Certificate identifier: CACERT
  Issued to: CA Cert Signing Authority, Issued by: O = Root CA, OU = http://www.cacert.org, CN = CA Cert Signing Authority, emailAddress = support@cacert.org
  Validity:
    Not before: 03-30-2003 12:29
    Not after: 03-29-2033 12:29
  Public key algorithm: rsaEncryption(4096 bits)

juniper@SRX210-1>

Verify the root cert is OK on each SRX.

juniper@SRX210-1> request security pki ca-certificate verify ca-profile CACERT 
CA certificate CACERT verified successfully

juniper@SRX210-1> 

Create a public/private keypair on each SRX.

juniper@SRX210-1> request security pki generate-key-pair certificate-id srx210-1 size 2048 type rsa    
Generated key pair srx210-1, key size 2048 bits

juniper@SRX210-1> 
juniper@SRX210-2> request security pki generate-key-pair certificate-id srx210-2 size 2048 type rsa 
Generated key pair srx210-2, key size 2048 bits

juniper@SRX210-2> 

Generate a certificate signing request (CSR) for the keypair just created. The SRX is a bit finicky on the text in the subject name.

juniper@SRX210-1> request security pki generate-certificate-request certificate-id srx210-1 domain-name srx210-1.blackhole-networks.com subject "CN=srx210-1.blackhole-networks.com,OU=VPNs,O=Blackhole-Neworks,L=Stuttgart,ST=Baden-Wuerttemberg,C=DE"                 
Generated certificate request
-----BEGIN CERTIFICATE REQUEST-----
MIIC/jCCAeYCAQAwfDERMA8GA1UEAxMIc3J4MjEwLTExDTALBgNVBAsTBFZQTnMx
GjAYBgNVBAoTEUJsYWNraG9sZS1OZXdvcmtzMRIwEAYDVQQHEwlTdHV0dGdhcnQx
GzAZBgNVBAgTEkJhZGVuLVd1ZXJ0dGVtYmVyZzELMAkGA1UEBhMCREUwggEiMA0G
CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDHvunt5EdaaamfowGEkPx2x+aWBS3w
+fs51kPrgRlMm3qTeUipyG2mZFeNENHrQ+IfHNq2TkRNPi7/8W9maRJJWjYgCXg9
jE0TK+OEEIXiGTeK182eO9wcbNLfx9xFbwtdLJk3+4R3OIKNAZGjXYAANdXheV6U
NCZKUFQzRkNnQxNVFnEFFdeqohf07EpX2fVWh3NOlF0eBfWD6eU6vPuaK+/E1E0e
YHlcYyZqIBctxpyKrwdEt2DKxu2j4gnJqF/01z03431FhncsPHMFUQVQH/mgIGOb
9wZCaieF4iSujLhxXtBEvmu95mNtwqlf5PkmcRxcwbrQwnP7avMROlj5AgMBAAGg
PTA7BgkqhkiG9w0BCQ4xLjAsMCoGA1UdEQQjMCGCH3NyeDIxMC0xLmJsYWNraG9s
ZS1uZXR3b3Jrcy5jb20wDQYJKoZIhvcNAQEFBQADggEBAEot0paMNY5lyLGmFAVy
EN79+TMVRio5GrKbWwR3noiYSEz7V29sEwfWibOw2TnjxblyNzK7IQIIcC8Qp/4T
c6fIlcG7TKSQo3bRsG7ghiiuXdfmuqaf7U/HnmYSTA4pK5o8nL2xtQuPan1VCATA
XhgOLcKTLrVZxWpfKziMgCxe7VLO2xrFmJis1peTHKQsbOAztP1RIzH2++ZgyXi3
8QnvecMNCdrC8HKNSL/nsnw0XFzRLA4raohybiWgc+LD4gEtabynU7kZ5+xzkWkf
7kY8X4O32JXYKYH/f1L7nrec/T+Mhm1/HLLgCHR4dvjvlyHQaTO1F+6kb1elKR9O
hcw=
-----END CERTIFICATE REQUEST-----
Fingerprint:
c6:71:37:db:cd:ca:79:21:0c:5e:1e:a3:92:4f:b0:10:f7:63:56:eb (sha1)
05:64:22:fc:9f:01:a9:25:f8:bd:fd:f6:57:55:37:bd (md5)
                                        
juniper@SRX210-1> 
juniper@SRX210-2> request security pki generate-certificate-request certificate-id  srx210-2 domain-name srx210-2.blackhole-networks.com subject "CN=srx210-2.blackhole-networks.com,OU=VPNs,O=Blackhole-Neworks,L=Stuttgart,ST=Baden-Wuerttemberg,C=DE"                                                      
Generated certificate request
-----BEGIN CERTIFICATE REQUEST-----
MIIC/jCCAeYCAQAwfDERMA8GA1UEAxMIc3J4MjEwLTIxDTALBgNVBAsTBFZQTnMx
GjAYBgNVBAoTEUJsYWNraG9sZS1OZXdvcmtzMRIwEAYDVQQHEwlTdHV0dGdhcnQx
GzAZBgNVBAgTEkJhZGVuLVd1ZXJ0dGVtYmVyZzELMAkGA1UEBhMCREUwggEiMA0G
CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC0W7SPPcf8LT2VzIJmPWMu11lxC914
TS3nvWG+MO7fjEgUbaPtxIHeejbL6X8LkNCBT1YkxSIUtMnc4yvaYlvY3un+s1QJ
6a1o/w91AFV9JCJQ5+DZroCkOXxkOolz9mt0cIpqTZ54EAsrvgc0ecgpRCSiNi0K
6WDnUn19UWYY6h1crjXLwRHQ6m+itNpw7LyB9cScTdNuI/v5dznc0S02/4p9OddT
dtq7Rl062Ru/VA4DTOy3vrU7+wf3ViLyGXDqDt6/lBYHj9xJHCBheb5DBkl0tVc/
Z/PdA5HXz+suv74J7h+gE4ekFCHanSIwUpNBJUuaDVgDPP+7lneow3cxAgMBAAGg
PTA7BgkqhkiG9w0BCQ4xLjAsMCoGA1UdEQQjMCGCH3NyeDIxMC0yLmJsYWNraG9s
ZS1uZXR3b3Jrcy5jb20wDQYJKoZIhvcNAQEFBQADggEBAKlpuczIqPbS/vti7pYr
0bf6I3qesY4b26m0+05o5S8l4/DdKHIQ7eZ8bvRFsV6q5jrTEGCLK3sYI4GHQ8Qc
WL8/f6TBLtro17TGcrJNy3Z2ZN+7nhWsfSLlJw7KTIzCPoJp5zk+AEd0XOoOt8yh
6XFtrTXHv9CD0OO2EB+hk4Ou30d5LJdpTJ7ch+8dkk+cI1Lrx8qHeanFbUheHN4B
Gkt5yhZqTKKlEWSJ9AahZMT10Bhc2YKqpot5i0u2cvLGLnqdiim9VLmZznCdfeyw
amUJs6XMrKO7BhHw32Zep7PwlvItGCWtwQ+6MtwfZYznYGkFOooWmiPjF4HaTR0a
x18=
-----END CERTIFICATE REQUEST-----
Fingerprint:
2f:f1:44:0c:d5:73:cb:03:ef:32:54:66:4d:de:d5:7c:ca:91:06:4d (sha1)
3e:dd:0d:07:6a:42:22:1c:ae:bd:ab:c5:00:bb:da:40 (md5)
                                        
juniper@SRX210-2> 

Now navigate to www.cacert.org and login to your account. Request a "New Server Certificate". Paste your CSR data into the web browser and submit for a new certificate. Server Certificate Request

Save the certificate to a file.

juniper@unix-box:~$ echo "-----BEGIN CERTIFICATE-----
> MIIFkDCCA3igAwIBAgIDDd+4MA0GCSqGSIb3DQEBBQUAMHkxEDAOBgNVBAoTB1Jv
> b3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9yZzEiMCAGA1UEAxMZ
> Q0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJARYSc3VwcG9y
> dEBjYWNlcnQub3JnMB4XDTEzMDkzMDA4NDkwOVoXDTE0MDMyOTA4NDkwOVowKjEo
> MCYGA1UEAxMfc3J4MjEwLTEuYmxhY2tob2xlLW5ldHdvcmtzLmNvbTCCASIwDQYJ
> KoZIhvcNAQEBBQADggEPADCCAQoCggEBAMe+6e3kR1ppqZ+jAYSQ/HbH5pYFLfD5
> +znWQ+uBGUybepN5SKnIbaZkV40Q0etD4h8c2rZORE0+Lv/xb2ZpEklaNiAJeD2M
> TRMr44QQheIZN4rXzZ473Bxs0t/H3EVvC10smTf7hHc4go0BkaNdgAA11eF5XpQ0
> JkpQVDNGQ2dDE1UWcQUV16qiF/TsSlfZ9VaHc06UXR4F9YPp5Tq8+5or78TUTR5g
> eVxjJmogFy3GnIqvB0S3YMrG7aPiCcmoX/TXPTfjfUWGdyw8cwVRBVAf+aAgY5v3
> BkJqJ4XiJK6MuHFe0ES+a73mY23CqV/k+SZxHFzButDCc/tq8xE6WPkCAwEAAaOC
> AW4wggFqMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgOoMDQGA1UdJQQtMCsG
> CCsGAQUFBwMCBggrBgEFBQcDAQYJYIZIAYb4QgQBBgorBgEEAYI3CgMDMDMGCCsG
> AQUFBwEBBCcwJTAjBggrBgEFBQcwAYYXaHR0cDovL29jc3AuY2FjZXJ0Lm9yZy8w
> MQYDVR0fBCowKDAmoCSgIoYgaHR0cDovL2NybC5jYWNlcnQub3JnL3Jldm9rZS5j
> cmwwgasGA1UdEQSBozCBoIIfc3J4MjEwLTEuYmxhY2tob2xlLW5ldHdvcmtzLmNv
> baAtBggrBgEFBQcIBaAhDB9zcngyMTAtMS5ibGFja2hvbGUtbmV0d29ya3MuY29t
> gh9zcngyMTAtMS5ibGFja2hvbGUtbmV0d29ya3MuY29toC0GCCsGAQUFBwgFoCEM
> H3NyeDIxMC0xLmJsYWNraG9sZS1uZXR3b3Jrcy5jb20wDQYJKoZIhvcNAQEFBQAD
> ggIBAKnusrTv4owKxPduAvMDjWqNMgnRGvo3ANJOreuRI4NQb9GtEVzMqg5y5XKv
> X8cXiHsyXnQju0a2CkKxrn+1HbLOp3wvtpzb1bj99s5H7wrGMbMsOZiVecsiIeSs
> fwD+dkP4ZtrO3ClpU5PXceQ9Dw2sFh8Nmd66M/Y640OII8XKfKKRtSqhsG8ZPUBr
> 2wFN/oZGVfm0eJleeJzM6kCZYLhaBTDUki+pSPLOogpcc8gFdvVyIcXeFz5nMD8F
> vuf26gInaH3U04XX1tyBRuOaOr/5xhVANBEd7XqSY8Z9Q0Vvx/jRFikspwq9XgbE
> HSZu2gqCNrUJN1+myX5Avrga/k76ASDJN55Hl4k3bma7f2DXHURsOkTCz+v8ZalH
> F29rlpTwqe5rPwQHk7dFxF7jOwL2cmQz4fwWayyGFvmQxwsO+X86oc0LUwLE6Tp4
> WlA5poMAfuJ+y9ctmFN/QTIpJvWI64OtdOMxZevwNRuUtgHAS5KBZU0Fss2GLEE5
> 1ILCMtmBHffyuG9TPGURzwv6TasOSxW16XSNL3hOhpoDzWleCqC8zIRkumVxOf+5
> KH/Es6BMfrnCjcYWZf+5MchUcs1Z9s6oCA11q1O6WkDmuuZwX1MFaqvHhKFBM7YU
> JfgYA+jDeLQmILKkgkqgobH6cCIYcCVHWfBV/VlYRla2CznA
> -----END CERTIFICATE-----" > srx210-1.pem

Check that the certificate is valid. Note that the CAcert root cert needs to be installed as a trusted CA for this to work (or the root cert needs to be referened in the openssl command).

juniper@unix-box:~$ openssl verify srx210-1.pem
srx210-1.pem: OK
juniper@unix-box:~$

Then copy it up to the matching SRX.

juniper@unix-box:~$ scp srx210-1.pem juniper@10.0.110.211:
srx210-1.pem                                  100% 1988     1.9KB/s   00:00    
juniper@unix-box:~$ 

Load the certificate up into the SRX.

juniper@SRX210-1> request security pki local-certificate load certificate-id srx210-1 filename srx210-1.pem 
Local certificate loaded successfully

Verify that the cerfificate is OK on the SRX.

juniper@SRX210-1> request security pki local-certificate verify certificate-id srx210-1 
Local certificate srx210-1 verification success

juniper@SRX210-1> 

Repeat the steps for the other SRX: CSR, certificate, etc. If something doesn't verify at any point, backup and fix!