Annotation of embedaddon/strongswan/README, revision 1.1.1.2

1.1       misho       1: # strongSwan Configuration #
                      2: 
                      3: ## Overview ##
                      4: 
                      5: strongSwan is an OpenSource IPsec-based VPN solution.
                      6: 
                      7: This document is just a short introduction of the strongSwan **swanctl** command
                      8: which uses the modern [**vici**](src/libcharon/plugins/vici/README.md) *Versatile
                      9: IKE Configuration Interface*. The deprecated **ipsec** command using the legacy
                     10: **stroke** configuration interface is described [**here**](README_LEGACY.md).
                     11: For more detailed information consult the man pages and
                     12: [**our wiki**](https://wiki.strongswan.org).
                     13: 
                     14: 
                     15: ## Quickstart ##
                     16: 
                     17: Certificates for users, hosts and gateways are issued by a fictitious
                     18: strongSwan CA. In our example scenarios the CA certificate `strongswanCert.pem`
                     19: must be present on all VPN endpoints in order to be able to authenticate the
                     20: peers. For your particular VPN application you can either use certificates from
                     21: any third-party CA or generate the needed private keys and certificates yourself
                     22: with the strongSwan **pki** tool, the use of which will be explained in one of
                     23: the sections following below.
                     24: 
                     25: 
                     26: ### Site-to-Site Case ###
                     27: 
                     28: In this scenario two security gateways _moon_ and _sun_ will connect the
                     29: two subnets _moon-net_ and _sun-net_ with each other through a VPN tunnel
                     30: set up between the two gateways:
                     31: 
                     32:     10.1.0.0/16 -- | 192.168.0.1 | === | 192.168.0.2 | -- 10.2.0.0/16
                     33:       moon-net          moon                 sun           sun-net
                     34: 
                     35: Configuration on gateway _moon_:
                     36: 
                     37:     /etc/swanctl/x509ca/strongswanCert.pem
                     38:     /etc/swanctl/x509/moonCert.pem
                     39:     /etc/swanctl/private/moonKey.pem
                     40: 
                     41:     /etc/swanctl/swanctl.conf:
                     42: 
                     43:         connections {
                     44:             net-net {
                     45:                 remote_addrs = 192.168.0.2
                     46: 
                     47:                 local {
                     48:                     auth = pubkey
                     49:                     certs = moonCert.pem
                     50:                 }
                     51:                 remote {
                     52:                     auth = pubkey
                     53:                     id = "C=CH, O=strongSwan, CN=sun.strongswan.org"
                     54:                 }
                     55:                 children {
                     56:                     net-net {
                     57:                         local_ts  = 10.1.0.0/16
                     58:                         remote_ts = 10.2.0.0/16
                     59:                         start_action = trap
                     60:                     }
                     61:                 }
                     62:             }
                     63:         }
                     64: 
                     65: Configuration on gateway _sun_:
                     66: 
                     67:     /etc/swanctl/x509ca/strongswanCert.pem
                     68:     /etc/swanctl/x509/sunCert.pem
                     69:     /etc/swanctl/private/sunKey.pem
                     70: 
                     71:     /etc/swanctl/swanctl.conf:
                     72: 
                     73:         connections {
                     74:             net-net {
                     75:                 remote_addrs = 192.168.0.1
                     76: 
                     77:                 local {
                     78:                     auth = pubkey
                     79:                     certs = sunCert.pem
                     80:                 }
                     81:                 remote {
                     82:                     auth = pubkey
                     83:                     id = "C=CH, O=strongSwan, CN=moon.strongswan.org"
                     84:                 }
                     85:                 children {
                     86:                     net-net {
                     87:                         local_ts  = 10.2.0.0/16
                     88:                         remote_ts = 10.1.0.0/16
                     89:                         start_action = trap
                     90:                     }
                     91:                 }
                     92:             }
                     93:         }
                     94: 
                     95: The local and remote identities used in this scenario are the
                     96: *subjectDistinguishedNames* contained in the end entity certificates.
                     97: The certificates and private keys are loaded into the **charon** daemon with
                     98: the command
                     99: 
                    100:     swanctl --load-creds
                    101: 
                    102: whereas
                    103: 
                    104:     swanctl --load-conns
                    105: 
                    106: loads the connections defined in `swanctl.conf`. With `start_action = trap` the
                    107: IPsec connection is automatically set up with the first plaintext payload IP
                    108: packet wanting to go through the tunnel.
                    109: 
                    110: ### Host-to-Host Case ###
                    111: 
                    112: This is a setup between two single hosts which don't have a subnet behind
                    113: them.  Although IPsec transport mode would be sufficient for host-to-host
                    114: connections we will use the default IPsec tunnel mode.
                    115: 
                    116:     | 192.168.0.1 | === | 192.168.0.2 |
                    117:          moon                sun
                    118: 
                    119: Configuration on host _moon_:
                    120: 
                    121:     /etc/swanctl/x509ca/strongswanCert.pem
                    122:     /etc/swanctl/x509/moonCert.pem
                    123:     /etc/swanctl/private/moonKey.pem
                    124: 
                    125:     /etc/swanctl/swanctl.conf:
                    126: 
                    127:         connections {
                    128:             host-host {
                    129:                 remote_addrs = 192.168.0.2
                    130: 
                    131:                 local {
                    132:                     auth=pubkey
                    133:                     certs = moonCert.pem
                    134:                 }
                    135:                 remote {
                    136:                     auth = pubkey
                    137:                     id = "C=CH, O=strongSwan, CN=sun.strongswan.org"
                    138:                 }
                    139:                 children {
                    140:                     net-net {
                    141:                         start_action = trap
                    142:                     }
                    143:                 }
                    144:             }
                    145:         }
                    146: 
                    147: Configuration on host _sun_:
                    148: 
                    149:     /etc/swanctl/x509ca/strongswanCert.pem
                    150:     /etc/swanctl/x509/sunCert.pem
                    151:     /etc/swanctl/private/sunKey.pem
                    152: 
                    153:     /etc/swanctl/swanctl.conf:
                    154: 
                    155:         connections {
                    156:             host-host {
                    157:                 remote_addrs = 192.168.0.1
                    158: 
                    159:                 local {
                    160:                     auth = pubkey
                    161:                     certs = sunCert.pem
                    162:                 }
                    163:                 remote {
                    164:                     auth = pubkey
                    165:                     id = "C=CH, O=strongSwan, CN=moon.strongswan.org"
                    166:                 }
                    167:                 children {
                    168:                     host-host {
                    169:                         start_action = trap
                    170:                     }
                    171:                 }
                    172:             }
                    173:         }
                    174: 
                    175: 
                    176: ### Roadwarrior Case ###
                    177: 
                    178: This is a very common case where a strongSwan gateway serves an arbitrary
                    179: number of remote VPN clients usually having dynamic IP addresses.
                    180: 
                    181:     10.1.0.0/16 -- | 192.168.0.1 | === | x.x.x.x |
                    182:       moon-net          moon              carol
                    183: 
                    184: Configuration on gateway _moon_:
                    185: 
                    186:     /etc/swanctl/x509ca/strongswanCert.pem
                    187:     /etc/swanctl/x509/moonCert.pem
                    188:     /etc/swanctl/private/moonKey.pem
                    189: 
                    190:     /etc/swanctl/swanctl.conf:
                    191: 
                    192:         connections {
                    193:             rw {
                    194:                 local {
                    195:                     auth = pubkey
                    196:                     certs = moonCert.pem
                    197:                     id = moon.strongswan.org
                    198:                 }
                    199:                 remote {
                    200:                     auth = pubkey
                    201:                 }
                    202:                 children {
                    203:                     net-net {
                    204:                         local_ts  = 10.1.0.0/16
                    205:                     }
                    206:                 }
                    207:             }
                    208:         }
                    209: 
                    210: Configuration on roadwarrior _carol_:
                    211: 
                    212:     /etc/swanctl/x509ca/strongswanCert.pem
                    213:     /etc/swanctl/x509/carolCert.pem
                    214:     /etc/swanctl/private/carolKey.pem
                    215: 
                    216:     /etc/swanctl/swanctl.conf:
                    217: 
                    218:         connections {
                    219:             home {
                    220:                 remote_addrs = moon.strongswan.org
                    221: 
                    222:                 local {
                    223:                     auth = pubkey
                    224:                     certs = carolCert.pem
                    225:                     id = carol@strongswan.org
                    226:                 }
                    227:                 remote {
                    228:                     auth = pubkey
                    229:                     id = moon.strongswan.org
                    230:                 }
                    231:                 children {
                    232:                     home {
                    233:                         local_ts  = 10.1.0.0/16
                    234:                         start_action = start
                    235:                     }
                    236:                 }
                    237:             }
                    238:         }
                    239: 
                    240: For `remote_addrs` the hostname `moon.strongswan.org` was chosen which will be
                    241: resolved by DNS at runtime into the corresponding IP destination address.
                    242: In this scenario the identity of the roadwarrior `carol` is the email address
                    243: `carol@strongswan.org` which must be included as a *subjectAlternativeName* in
                    244: the roadwarrior certificate `carolCert.pem`.
                    245: 
                    246: 
                    247: ### Roadwarrior Case with Virtual IP ###
                    248: 
                    249: Roadwarriors usually have dynamic IP addresses assigned by the ISP they are
                    250: currently attached to.  In order to simplify the routing from _moon-net_ back
                    251: to the remote access client _carol_ it would be desirable if the roadwarrior had
                    252: an inner IP address chosen from a pre-defined pool.
                    253: 
                    254:     10.1.0.0/16 -- | 192.168.0.1 | === | x.x.x.x | -- 10.3.0.1
                    255:       moon-net          moon              carol       virtual IP
                    256: 
                    257: In our example the virtual IP address is chosen from the address pool
                    258: `10.3.0.0/16` which can be configured by adding the section
                    259: 
                    260:     pools {
                    261:         rw_pool {
                    262:             addrs = 10.3.0.0/16
                    263:         }
                    264:     }
                    265: 
                    266: to the gateway's `swanctl.conf` from where they are loaded into the **charon**
                    267: daemon using the command
                    268: 
                    269:     swanctl --load-pools
                    270: 
                    271: To request an IP address from this pool a roadwarrior can use IKEv1 mode config
                    272: or IKEv2 configuration payloads. The configuration for both is the same
                    273: 
                    274:     vips = 0.0.0.0
                    275: 
                    276: Configuration on gateway _moon_:
                    277: 
                    278:     /etc/swanctl/x509ca/strongswanCert.pem
                    279:     /etc/swanctl/x509/moonCert.pem
                    280:     /etc/swanctl/private/moonKey.pem
                    281: 
                    282:     /etc/swanctl/swanctl.conf:
                    283: 
                    284:         connections {
                    285:             rw {
                    286:                 pools = rw_pool
                    287: 
                    288:                 local {
                    289:                     auth = pubkey
                    290:                     certs = moonCert.pem
                    291:                     id = moon.strongswan.org
                    292:                 }
                    293:                 remote {
                    294:                     auth = pubkey
                    295:                 }
                    296:                 children {
                    297:                     net-net {
                    298:                         local_ts  = 10.1.0.0/16
                    299:                     }
                    300:                 }
                    301:             }
                    302:         }
                    303: 
                    304:         pools {
                    305:             rw_pool {
                    306:                 addrs = 10.30.0.0/16
                    307:             }
                    308:         }
                    309: 
                    310: Configuration on roadwarrior _carol_:
                    311: 
                    312:     /etc/swanctl/x509ca/strongswanCert.pem
                    313:     /etc/swanctl/x509/carolCert.pem
                    314:     /etc/swanctl/private/carolKey.pem
                    315: 
                    316:     /etc/swanctl/swanctl.conf:
                    317: 
                    318:         connections {
                    319:             home {
                    320:                 remote_addrs = moon.strongswan.org
                    321:                 vips = 0.0.0.0
                    322: 
                    323:                 local {
                    324:                     auth = pubkey
                    325:                     certs = carolCert.pem
                    326:                     id = carol@strongswan.org
                    327:                 }
                    328:                 remote {
                    329:                     auth = pubkey
                    330:                     id = moon.strongswan.org
                    331:                 }
                    332:                 children {
                    333:                     home {
                    334:                         local_ts  = 10.1.0.0/16
                    335:                         start_action = start
                    336:                     }
                    337:                 }
                    338:             }
                    339:         }
                    340: 
                    341: 
                    342: ### Roadwarrior Case with EAP Authentication ###
                    343: 
                    344: This is a very common case where a strongSwan gateway serves an arbitrary
                    345: number of remote VPN clients which authenticate themselves via a password
                    346: based *Extended Authentication Protocol* as e.g. *EAP-MD5* or *EAP-MSCHAPv2*.
                    347: 
                    348:     10.1.0.0/16 -- | 192.168.0.1 | === | x.x.x.x |
                    349:       moon-net          moon              carol
                    350: 
                    351: Configuration on gateway _moon_:
                    352: 
                    353:     /etc/swanctl/x509ca/strongswanCert.pem
                    354:     /etc/swanctl/x509/moonCert.pem
                    355:     /etc/swanctl/private/moonKey.pem
                    356: 
                    357:     /etc/swanctl/swanctl.conf:
                    358: 
                    359:         connections {
                    360:             rw {
                    361:                 local {
                    362:                     auth = pubkey
                    363:                     certs = moonCert.pem
                    364:                     id = moon.strongswan.org
                    365:                 }
                    366:                 remote {
                    367:                     auth = eap-md5
                    368:                 }
                    369:                 children {
                    370:                     net-net {
                    371:                         local_ts  = 10.1.0.0/16
                    372:                     }
                    373:                 }
                    374:                 send_certreq = no
                    375:             }
                    376:         }
                    377: 
                    378: The  `swanctl.conf` file additionally contains a `secrets` section defining all
                    379: client credentials
                    380: 
                    381:         secrets {
                    382:             eap-carol {
                    383:                 id = carol@strongswan.org
                    384:                 secret = Ar3etTnp
                    385:             }
                    386:             eap-dave {
                    387:                 id = dave@strongswan.org
                    388:                 secret = W7R0g3do
                    389:             }
                    390:         }
                    391: 
                    392: Configuration on roadwarrior _carol_:
                    393: 
                    394:     /etc/swanctl/x509ca/strongswanCert.pem
                    395: 
                    396:     /etc/swanctl/swanctl.conf:
                    397: 
                    398:         connections {
                    399:             home {
                    400:                 remote_addrs = moon.strongswan.org
                    401: 
                    402:                 local {
                    403:                     auth = eap
                    404:                     id = carol@strongswan.org
                    405:                 }
                    406:                 remote {
                    407:                     auth = pubkey
                    408:                     id = moon.strongswan.org
                    409:                 }
                    410:                 children {
                    411:                     home {
                    412:                         local_ts  = 10.1.0.0/16
                    413:                         start_action = start
                    414:                     }
                    415:                 }
                    416:             }
                    417:         }
                    418: 
                    419:         secrets {
                    420:             eap-carol {
                    421:                 id = carol@strongswan.org
                    422:                 secret = Ar3etTnp
                    423:             }
                    424:         }
                    425: 
                    426: 
                    427: ### Roadwarrior Case with EAP Identity ###
                    428: 
                    429: Often a client EAP identity is exchanged via EAP which differs from the
                    430: external IKEv2 identity. In this example the IKEv2 identity defaults to
                    431: the IPv4 address of the client.
                    432: 
                    433:     10.1.0.0/16 -- | 192.168.0.1 | === | x.x.x.x |
                    434:       moon-net          moon              carol
                    435: 
                    436: Configuration on gateway _moon_:
                    437: 
                    438:     /etc/swanctl/x509ca/strongswanCert.pem
                    439:     /etc/swanctl/x509/moonCert.pem
                    440:     /etc/swanctl/private/moonKey.pem
                    441: 
                    442:     /etc/swanctl/swanctl.conf:
                    443: 
                    444:         connections {
                    445:             rw {
                    446:                 local {
                    447:                     auth = pubkey
                    448:                     certs = moonCert.pem
                    449:                     id = moon.strongswan.org
                    450:                 }
                    451:                 remote {
                    452:                     auth = eap-md5
                    453:                     eap_id = %any
                    454:                 }
                    455:                 children {
                    456:                     net-net {
                    457:                         local_ts  = 10.1.0.0/16
                    458:                     }
                    459:                 }
                    460:                 send_certreq = no
                    461:             }
                    462:         }
                    463: 
                    464:         secrets {
                    465:             eap-carol {
                    466:                 id = carol
                    467:                 secret = Ar3etTnp
                    468:             }
                    469:             eap-dave {
                    470:                 id = dave
                    471:                 secret = W7R0g3do
                    472:             }
                    473:         }
                    474: 
                    475: Configuration on roadwarrior _carol_:
                    476: 
                    477:     /etc/swanctl/x509ca/strongswanCert.pem
                    478: 
                    479:     /etc/swanctl/swanctl.conf:
                    480: 
                    481:         connections {
                    482:             home {
                    483:                 remote_addrs = moon.strongswan.org
                    484: 
                    485:                 local {
                    486:                     auth = eap
                    487:                     eap_id = carol
                    488:                 }
                    489:                 remote {
                    490:                     auth = pubkey
                    491:                     id = moon.strongswan.org
                    492:                 }
                    493:                 children {
                    494:                     home {
                    495:                         local_ts  = 10.1.0.0/16
                    496:                         start_action = start
                    497:                     }
                    498:                 }
                    499:             }
                    500:         }
                    501: 
                    502:         secrets {
                    503:             eap-carol {
                    504:                 id = carol
                    505:                 secret = Ar3etTnp
                    506:             }
                    507:         }
                    508: 
                    509: 
                    510: ## Generating Certificates and CRLs ##
                    511: 
                    512: This section is not a full-blown tutorial on how to use the strongSwan **pki**
                    513: tool. It just lists a few points that are relevant if you want to generate your
                    514: own certificates and CRLs for use with strongSwan.
                    515: 
                    516: 
                    517: ### Generating a CA Certificate ###
                    518: 
                    519: The pki statement
                    520: 
                    521:     pki --gen --type ed25519 --outform pem > strongswanKey.pem
                    522: 
                    523: generates an elliptic Edwards-Curve key with a cryptographic strength of 128
                    524: bits. The corresponding public key is packed into a self-signed CA certificate
                    525: with a lifetime of 10 years (3652 days)
                    526: 
                    527:     pki --self --ca --lifetime 3652 --in strongswanKey.pem \
                    528:                --dn "C=CH, O=strongSwan, CN=strongSwan Root CA" \
                    529:                --outform pem > strongswanCert.pem
                    530: 
                    531: which can be listed with the command
                    532: 
                    533:     pki --print --in strongswanCert.pem
                    534: 
                    535:     subject:  "C=CH, O=strongSwan, CN=strongSwan Root CA"
                    536:     issuer:   "C=CH, O=strongSwan, CN=strongSwan Root CA"
                    537:     validity:  not before May 18 08:32:06 2017, ok
                    538:                not after  May 18 08:32:06 2027, ok (expires in 3651 days)
                    539:     serial:    57:e0:6b:3a:9a:eb:c6:e0
                    540:     flags:     CA CRLSign self-signed
                    541:     subjkeyId: 2b:95:14:5b:c3:22:87:de:d1:42:91:88:63:b3:d5:c1:92:7a:0f:5d
                    542:     pubkey:    ED25519 256 bits
                    543:     keyid:     a7:e1:6a:3f:e7:6f:08:9d:89:ec:23:92:a9:a1:14:3c:78:a8:7a:f7
                    544:     subjkey:   2b:95:14:5b:c3:22:87:de:d1:42:91:88:63:b3:d5:c1:92:7a:0f:5d
                    545: 
                    546: If you prefer the CA private key and X.509 certificate to be in binary DER format
                    547: then just omit the `--outform pem` option. The directory `/etc/swanctl/x509ca`
                    548: contains all required CA certificates either in binary DER or in Base64 PEM
                    549: format. Irrespective of the file suffix the correct format will be determined
                    550: by strongSwan automagically.
                    551: 
                    552: 
                    553: ### Generating a Host or User End Entity Certificate ###
                    554: 
                    555: Again we are using the command
                    556: 
                    557:     pki --gen --type ed25519 --outform pem > moonKey.pem
                    558: 
                    559: to generate an Ed25519 private key for the host `moon`. Alternatively you could
                    560: type
                    561: 
                    562:     pki --gen --type rsa --size 3072 > moonKey.der
                    563: 
                    564: to generate a traditional 3072 bit RSA key and store it in binary DER format.
                    565: As an alternative a **TPM 2.0** *Trusted Platform Module* available on every
                    566: recent Intel platform could be used as a virtual smartcard to securely store an
                    567: RSA or ECDSA private key. For details, refer to the TPM 2.0
                    568: [HOWTO](https://wiki.strongswan.org/projects/strongswan/wiki/TpmPlugin).
                    569: 
                    570: In a next step the command
                    571: 
                    572:     pki --req --type priv --in moonKey.pem \
1.1.1.2 ! misho     573:               --dn "C=CH, O=strongswan, CN=moon.strongswan.org" \
1.1       misho     574:               --san moon.strongswan.org --outform pem > moonReq.pem
                    575: 
                    576: creates a PKCS#10 certificate request that has to be signed by the CA.
                    577: Through the [multiple] use of the `--san` parameter any number of desired
                    578: *subjectAlternativeNames* can be added to the request. These can be of the
                    579: form
                    580: 
                    581:     --san sun.strongswan.org     # fully qualified host name
                    582:     --san carol@strongswan.org   # RFC822 user email address
                    583:     --san 192.168.0.1            # IPv4 address
                    584:     --san fec0::1                # IPv6 address
                    585: 
                    586: Based on the certificate request the CA issues a signed end entity certificate
                    587: with the following command
                    588: 
                    589:     pki --issue --cacert strongswanCert.pem --cakey strongswanKey.pem \
                    590:                 --type pkcs10 --in moonReq.pem --serial 01 --lifetime 1826 \
                    591:                 --outform pem > moonCert.pem
                    592: 
                    593: If the `--serial` parameter with a hexadecimal argument is omitted then a random
                    594: serial number is generated. Some third party VPN clients require that a VPN
                    595: gateway certificate contains the *TLS Server Authentication* Extended Key Usage
                    596: (EKU) flag which can be included with the following option
                    597: 
                    598:     --flag serverAuth
                    599: 
                    600: If you want to use the dynamic CRL fetching feature described in one of the
                    601: following sections then you may include one or several *crlDistributionPoints*
                    602: in your end entity certificates using the `--crl` parameter
                    603: 
                    604:     --crl  http://crl.strongswan.org/strongswan.crl
                    605:     --crl "ldap://ldap.strongswan.org/cn=strongSwan Root CA, o=strongSwan,c=CH?certificateRevocationList"
                    606: 
                    607: The issued host certificate can be listed with
                    608: 
                    609:     pki --print --in moonCert.pem
                    610: 
                    611:     subject:  "C=CH, O=strongSwan, CN=moon.strongswan.org"
                    612:     issuer:   "C=CH, O=strongSwan, CN=strongSwan Root CA"
                    613:     validity:  not before May 19 10:28:19 2017, ok
                    614:                not after  May 19 10:28:19 2022, ok (expires in 1825 days)
                    615:     serial:    01
                    616:     altNames:  moon.strongswan.org
                    617:     flags:     serverAuth
                    618:     CRL URIs:  http://crl.strongswan.org/strongswan.crl
                    619:     authkeyId: 2b:95:14:5b:c3:22:87:de:d1:42:91:88:63:b3:d5:c1:92:7a:0f:5d
                    620:     subjkeyId: 60:9d:de:30:a6:ca:b9:8e:87:bb:33:23:61:19:18:b8:c4:7e:23:8f
                    621:     pubkey:    ED25519 256 bits
                    622:     keyid:     39:1b:b3:c2:34:72:1a:01:08:40:ce:97:75:b8:be:ce:24:30:26:29
                    623:     subjkey:   60:9d:de:30:a6:ca:b9:8e:87:bb:33:23:61:19:18:b8:c4:7e:23:8f
                    624: 
                    625: Usually, a Windows, OSX, Android or iOS based VPN client needs its private key,
                    626: its host or user certificate and the CA certificate.  The most convenient way
                    627: to load this information is to put everything into a PKCS#12 container:
                    628: 
                    629:     openssl pkcs12 -export -inkey carolKey.pem \
                    630:                    -in carolCert.pem -name "carol" \
                    631:                    -certfile strongswanCert.pem -caname "strongSwan Root CA" \
                    632:                    -out carolCert.p12
                    633: 
                    634: The strongSwan **pki** tool currently is not able to create PKCS#12 containers
                    635: so that **openssl** must be used.
                    636: 
                    637: 
                    638: ### Generating a CRL ###
                    639: 
                    640: An empty CRL that is signed by the CA can be generated with the command
                    641: 
                    642:     pki --signcrl --cacert strongswanCert.pem --cakey strongswanKey.pem \
                    643:                   --lifetime 30 > strongswan.crl
                    644: 
                    645: If you omit the `--lifetime` option then the default value of 15 days is used.
                    646: CRLs can either be uploaded to a HTTP or LDAP server or put in binary DER or
                    647: Base64 PEM format into the `/etc/swanctl/x509crl` directory from where they are
                    648: loaded into the **charon** daemon with the command
                    649: 
                    650:     swanctl --load-creds
                    651: 
                    652: 
                    653: ### Revoking a Certificate ###
                    654: 
                    655: A specific end entity certificate is revoked with the command
                    656: 
                    657:     pki --signcrl --cacert strongswanCert.pem --cakey strongswanKey.pem \
                    658:                   --lifetime 30 --lastcrl strongswan.crl \
                    659:                   --reason key-compromise --cert moonCert.pem > new.crl
                    660: 
                    661: Instead of the certificate file (in our example moonCert.pem), the serial number
                    662: of the certificate to be revoked can be indicated using the `--serial`
                    663: parameter. The `pki --signcrl --help` command documents all possible revocation
                    664: reasons but the `--reason` parameter can also be omitted. The content of the new
                    665: CRL file can be listed with the command
                    666: 
                    667:     pki --print --type crl --in new.crl
                    668: 
                    669:     issuer:   "C=CH, O=strongSwan, CN=strongSwan Root CA"
                    670:     update:    this on May 19 11:13:01 2017, ok
                    671:                next on Jun 18 11:13:01 2017, ok (expires in 29 days)
                    672:     serial:    02
                    673:     authKeyId: 2b:95:14:5b:c3:22:87:de:d1:42:91:88:63:b3:d5:c1:92:7a:0f:5d
                    674:     1 revoked certificate:
                    675:       01: May 19 11:13:01 2017, key compromise
                    676: 
                    677: 
                    678: ### Local Caching of CRLs ###
                    679: 
                    680: The `strongswan.conf` option
                    681: 
                    682:     charon {
                    683:         cache_crls = yes
                    684:     }
                    685: 
                    686: activates the local caching of CRLs that were dynamically fetched from an
                    687: HTTP or LDAP server.  Cached copies are stored in `/etc/swanctl/x509crl` using a
                    688: unique filename formed from the issuer's *subjectKeyIdentifier* and the
                    689: suffix `.crl`.
                    690: 
                    691: With the cached copy the CRL is immediately available after startup.  When the
                    692: local copy has become stale, an updated CRL is automatically fetched from one of
                    693: the defined CRL distribution points during the next IKEv2 authentication.

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>