I started writing up how to use AMS, and found I had written a lot about how to manage certificate and key rings from a z/OS perspective. It made more sense to write this up in its own blog post.
When using AMS, you may have to export public certificates to other z/OS images, and to mid range machines.
Basic key store management
z/OS key rings
On z/OS, each local userid has its own private key on its own keyring, with all of the shared public keys on the xxxxAMSM userid’s keyring. Update the xxxxAMSM’x keyring, and every one picks up the change – great – easy.
The certificate used to sign is the default certificate in the user’s keyring.
You can have multiple queue managers in a single z/OS image or a sysplex, each with the xxxxAMSM address space. If they use the same started task userid, they will share the same keyring. (So to have queue managers use a different keyring, they will need a different userid.)
Midrange key stores
With midrange, a userid needs a key store with the private and public keys. With multiple machines you need a process to update and distribute key stores. For example:
- Create a key store in a central site. Do all maintenance to this key store, adding and removing certificates as required.
- Securely distribute this to all machines tat use AMS.
- On each user’s machine add the user’s private key to this new copy of the key store.
- Rename the key stores; current to old, new to current.
- Restart the client.
- Check it all works, delete the old key store.
In my case I just used one client, and updated the client’s key store directly.
A user can point to different key stores, so you need keep in mind that it is the user’s certificate, not the userid that does signing, encryption etc..
When do I need to export a public certificate?
Signing
- If the certificate is self signed, the recipients will need a copy of the public certificate
- If the certificate is signed by a Certificate Authority the recipient needs a copy of the CA certificate, and may already have it.
As a recipient of encrypted data
- Each sender needs the public certificate (and public key) of each recipient, to be able to encrypt the payload.
Connecting the certificate in the same RACF database.
If the xxxxAMSM keyring is in the same RACF database as the the user’s certificate you just need to connect it to the keyring
RACDCERT ID(START1) connect(ID(ADCDC) LABEL(‘AMSZ’) –
RING(drq.ams.keyring) USAGE(SITE))
Exporting a certificate from a RACF database.
You need to export the certificate to a dataset. You can use binary format, or base64 encoded. I use base64 encoded.
RACDCERT ID(ADCDC) EXPORT(LABEL(‘AMSZ’))-
DSN(‘ADCDC.AMSZ.PEM’) FORMAT(CERTB64) PASSWORD(‘password’)
This file needs to be sent to the other systems and imported into the key stores.
Import a certificate into z/OS
For z/OS you need to import the public certificate to a userid. You might have a userid just for these certificate, or a userid for enterprise (BANK1, BANK2) etc. I’ve used ADCDA below.
The following example uses a certificate (for ja2) sent from a Linux machine. It was FTPed to z/OS into a data set ADCD.JA2.PEM.
#delete any old instance
RACDCERT ID(ADCDA) DELETE (LABEL(‘LINUXJA2’))RACDCERT ADD(‘ADCD.JA2.PEM’) –
ID(ADCDA) WITHLABEL(‘LINUXJA2’) TRUSTRACDCERT ID(START1) CONNECT(RING(drq.ams.keyring ) –
ID(ADCDA) LABEL(‘LINUXJA2’))RACDCERT LIST (LABEL(‘LINUXJA2’)) ID(ADCDA)
SETROPTS RACLIST(DIGTCERT) REFRESH
Extract a certificate from a mid-range key store
To extract from a CMS key store.
runmqakm -cert -extract -db my.kdb -pw passw0rd -label COLIN -target LINUXID.pem -format ascii
To extract from a .jks key store
runmqckm -cert -extract -db my.jks -pw zpassword -label COLIN -target LINUXID.PEM -format ascii -type jks
FTP the file to the remote systems and import it.
Importing a certificate into a mid-range key store
Follow the key store update process to add it to each midrange key store. The certificate was exported from z/OS and FTPed to the Linux machine as file /home/colinpaice/mqamsclient/zADCD.AMSZ.pem
For the .jks key store (used by Java).
/opt/mqm/bin/runmqckm -cert -add -db trust.jks -type jks -file /home/colinpaice/mqamsclient/zADCD.AMSZ.pem -label zADCDC -pw zpassword
#It is worth checking the certificate to make sure the certificate chain is present.
/opt/mqm/bin/runmqckm -cert -validate -db trust.jks -type jks -pw zpassword -label zADCDC
For a CMS keystore
/opt/mqm/bin/runmqckm -cert -add -db $key.kdb -file /home/colinpaice/mqamsclient/zADCD.AMSZ.pem -label zADCDB -pw passw0rd
Other AMS blog posts
- Overview and challenges of using end to end message encryption (AMS).
- Certificate and keyring management for AMS.
- Installing AMS on z/OS.
- What certificates do I need for AMS with a client going to z/OS?
- checkAMS: program to check your AMS defintions are consistent with z/OS keyring
- Adding more users to AMS.
- Installing AMS on midrange for end to end message protection
- Understanding setmqspl to set up AMS definitions.
- How to administer AMS policies, and use the set policy command.
- Brain check and reset, needed for AMS keystores on midrange.
- Using runamscred to encrypt the passwords in the keystore.conf file.
- How do I find the recipients and signer of an AMS message?
- I have a message on the AMS DLQ – what can I do about it? and How do I process messages on the dead letter queue (DLQ)?
One thought on “Certificate and keyring management for AMS.”