To create new wiki account, please join us on #znc at Libera.Chat and ask admins to create a wiki account for you. You can say thanks to spambots for this inconvenience.

Cert

From ZNC
Revision as of 20:52, 5 June 2021 by MetaNova (talk | contribs) (added SHA-512 example, useful for libera.chat)
Jump to navigation Jump to search


This module lets users use their own SSL client certificate to connect to a server, such as CertFP.

You will have to generate an SSL client certificate to use with this module. Either place it at ~/.znc/users/<user>/networks/<network>/moddata/cert/user.pem if you loaded Cert for your network, ~/.znc/users/<user>/moddata/cert/user.pem if you loaded cert for your user, or use the web interface to upload the certificate.

You can usually test if Cert is supported by services simply by sending /msg NickServ cert. If you get an error about “Insufficient parameters for CERT,” CertFP is supported. If you get an error about unknown command, or no response at all, it may not supported. While this is a fairly reliable test, it may vary by IRC network, for example Rizon supports Cert but uses the command /msg NickServ access instead.

Arguments

This user/network module takes no arguments.

Read loading modules to learn more about loading modules.

Commands

+---------+-----------+--------------------------------+
| Command | Arguments | Description                    |
+---------+-----------+--------------------------------+
| Help    |           | Generate this output           |
| delete  |           | Delete the current certificate |
| info    |           |                                |
+---------+-----------+--------------------------------+

Generating a certificate

You can use the following openssl commands to generate a certificate.

These commands will produce a certificate which would expire in 3650 days. You can modify the openssl's arguments to change this.

user.pem is the certificate you will need to add to ZNC.

Based on your compatibility matrix, choose to create a RSA or an ECC key. ECC key are wider supported nowadays.

  • For a RSA based certificate, with 4096-bit key length:
# Generate the rsa private key and the certificate embeded in same file for ZNC's YourNickname:
openssl req -nodes -sha512 -newkey rsa:4096 -keyout user.pem -x509 -days 3650 -out user.pem -subj "/CN=YourNickname"
  • For an ECC based certificate, with 256-bit key length:
# Generate the ecc private key:
openssl ecparam -genkey -name prime256v1 -out user.key
# Generate the Certificate Signing Request (CSR) for ZNC's YourNickname:
openssl req -new -sha512 -key user.key -out user.csr -subj "/CN=YourNickname"
# Submit the CSR to a CA or selfsign it yourself with:
openssl req -x509 -sha512 -days 3650 -key user.key -in user.csr -out user.crt
# Embed private key and certificate in same file as requested in many cases:
cat user.crt user.key > user.pem

If you are following instructions from certauth, you can stop here. Your certificate is user.pem, and you must tell your client to use it. See https://freenode.net/kb/answer/certfp or https://libera.chat/guides/certfp

Utilizing the certificate

This part of the article is written generically, and the instructions might differ from network to network dependent on a myriad of variables. If something doesn't work, consult your network's website and support venues.

Move the cert to the module directory:

mv user.pem ~/.znc/users/<user>/networks/<network>/moddata/cert/

If you loaded Cert for your user, and not your network:

mv user.pem ~/.znc/users/<user>/moddata/cert/

Now, connect to (or reconnect to) your network. Some services support adding a fingerprint to your NickServ account without specifying it outright.
On networks that support this, you can do:

/msg NickServ cert add

If the above command did not work, reference /msg NickServ help cert to see if the network you're on allows this.
If /msg NickServ cert add by itself is not supported, you then need to add the fingerprint explicitly. Such as:

/msg NickServ cert add fingerprint

To get a SHA-1 fingerprint, enter the following command:

openssl x509 -sha1 -noout -fingerprint -in user.pem | sed -e 's/^.*=//;s/://g;y/ABCDEF/abcdef/'

note: Not all networks use SHA-1 fingerprints. Consult the network you're connecting to for this information.

Libera.chat uses SHA-512 fingerprints. To get the SHA-512 fingerprint, enter the following command:

openssl x509 -sha512 -noout -fingerprint -in user.pem | sed -e 's/^.*=//;s/://g;y/ABCDEF/abcdef/'

note: It is also often possible to WHOIS yourself for the fingerprint.