I was trying to use system ssl to write a program to use native z/O TLS facilities. I wasted a couple of hours because it said it could not find my keyring. Then when I collected a trace, it sometimes did not find the file – which did exist as I could list it.
If I used
//START1 EXEC PGM=GSKMAIN,REGION=0M,
//* PARM='4000'
// PARM=('ENVAR("_CEE_ENVFILE=DD:STDENV")/4000')
//STDENV DD PATH='/u/ibmuser/gskparms'
When the USS file had
GSK_TRACE_FILE=/tmp/zzztrace.file
GSK_TRACE=0xff
GSK_KEYRING_FILE=START1/TN3270
This worked file
When I used
//START1 EXEC PGM=GSKMAIN,REGION=0M,
//* PARM='4000'
// PARM=('ENVAR("_CEE_ENVFILE=DD:STDENV")/4000')
//STDENV DD *
GSK_TRACE_FILE=/tmp/zzztrace.file
GSK_TRACE=0xff
GSK_KEYRING_FILE=START1/TN3270
/*
This failed to work.
If I looked in the trace file I had
ENTRY gsk_open_keyring(): ---> Keyring 'START1/TN3270 '
Where it had taken the whole length of the line – and so START1/TN3270 padded with blanks was not found.
The trace file was not /tmp/zzztrace.file, it was /tmp/zzztrace.file padded with lots of blanks!
The answer is to use a environment file in USS, not in JCL or a data set.