Fading Coder

One Final Commit for the Last Sprint

Home > Tech > Content

Common Issues and Solutions When Deploying StrongSwan IPSec

Tech Apr 24 16

When establishing IPSec connections using StrongSwan, certificate-based authentication is frequently employed. Certificates can either be obtained from external Certificate Authorities or self-signed. In the latter case, StrongSwan's built-in pki utility facilitates certificate generation.

To generate a self-signed root CA certificate and its corresponding private key:

ipsec pki --gen --outform pem > caPrivateKey.pem
ipsec pki --self --in caPrivateKey.pem --dn "C=CN, O=ExampleOrg, CN=Example CA" --ca --outform pem > caCertificate.pem

Next, create RSA private keys for both endpoints (e.g., client at 192.168.171.129 and server at 192.168.171.131), then issue certificates signed by the CA:

ipsec pki --gen --size 4096 --type rsa --outform pem > serverKey.pem
ipsec pki --pub --in serverKey.pem --type rsa | ipsec pki --issue --lifetime 3650 --cacert caCertificate.pem --cakey caPrivateKey.pem --dn "CN=192.168.171.131" --san="192.168.171.131" --flag serverAuth --flag ikeIntermediate --outform pem > serverCert.pem

ipsec pki --gen --size 4096 --type rsa --outform pem > clientKey.pem
ipsec pki --pub --in clientKey.pem --type rsa | ipsec pki --issue --lifetime 3650 --cacert caCertificate.pem --cakey caPrivateKey.pem --dn "CN=192.168.171.129" --san="192.168.171.129" --flag serverAuth --flag ikeIntermediate --outform pem > clientCert.pem

Place these files into appropriate directories under /etc/ipsec.d/. For instance, on the client machine (192.168.171.129):

cp caCertificate.pem /etc/ipsec.d/cacerts/
cp clientKey.pem /etc/ipsec.d/private/
cp clientCert.pem /etc/ipsec.d/certs/

On the server side (192.168.171.131):

cp caCertificate.pem /etc/ipsec.d/cacerts/
cp serverKey.pem /etc/ipsec.d/private/
cp serverCert.pem /etc/ipsec.d/certs/

After deploying certificates, it is essential to restart the StrongSwan service for changes to take effect:

systemctl restart strongswan

Alternatively, use the command ipsec restart. To verify that certificates have been correctly loaded, run:

ipsec listcerts

Ensure that all deployed certificates appear in the outputt; missing entries indicate misconfiguration.

During certificate creation, the Common Name (CN) field plays a crucial role in identification. This value should match the leftid or rightid specified in the configuration file (ipsec.conf). Mismatched identifiers will result in failed authentication attempts. Below shows an example configuration snippet where leftid matches the CN defined during certificate issuance.

For the client node:

conn host-to-host
    left=192.168.171.129
    leftid=192.168.171.129
    leftcert=clientCert.pem
    right=192.168.171.131
    rightid=192.168.171.131

And for the server node:

conn ipsec-tunnel
    left=192.168.171.131
    leftid=192.168.171.131
    leftcert=serverCert.pem
    right=192.168.171.129
    rightid=192.168.171.129

While IP addresses are used here for simplicity, alternative unique identifiers like domain names or email addresses may also serve as valid CN values.

Two distinct tools exist for managing StrongSwan: ipsec and swanctl. The former relies on configurations stored in /etc/ipsec.conf, whereas the latter uses /etc/swanctl/swanctl.conf. These tools operate independent and do not share configuration data. Choose one method consistently throughout deployment.

Whenever modifications occur within configuration files, reloading becomes necessary. Use the following commands according:

  • After updating /etc/ipsec.conf: ipsec reload
  • After modifying /etc/ipsec.secrets: ipsec rereadsecrets
  • Following edits to /etc/swanctl/swanctl.conf: swanctl --load-all

Failure to reload results in unchanged behavior despite apparent updates.

Related Articles

Implement Image Upload Functionality for Django Integrated TinyMCE Editor

Django’s Admin panel is highly user-friendly, and pairing it with TinyMCE, an effective rich text editor, simplifies content management significantly. Combining the two is particular useful for bloggi...

SBUS Signal Analysis and Communication Implementation Using STM32 with Fus Remote Controller

Overview In a recent project, I utilized the SBUS protocol with the Fus remote controller to control a vehicle's basic operations, including movement, lights, and mode switching. This article is aimed...

Comprehensive Guide to Hive SQL Syntax and Operations

This article provides a detailed walkthrough of Hive SQL, categorizing its features and syntax for practical use. Hive SQL is segmented into the following categories: DDL Statements: Operations on...

Leave a Comment

Anonymous

◎Feel free to join the discussion and share your thoughts.