Could someone be so kind as to post examples of their
extfile or extensions section?

Here's an example of a shell script that generates an entire PKI: root, two intermediates, and one SSL (server) end user.

This is one of about 35 of these I did trying to figure out
why the IBM HTTP Server and the Novell eDirectory LDAP server
didn't like my original PKI design for my campus.

#! /bin/sh

# Test17 with KeyUsage extension in server cert marked as critical (was hyp1)

OPENSSL="/usr/bin/openssl"
CONFFILE=conf.$$
SNUMFILE=snum.$$
CAV="18"

# Generate the Root certificate

cat <<@eof >$CONFFILE
oid_section = addoid
[addoid] # our local object IDs
umCPS = 1.3.6.1.4.1.99999.1.2.1
[req] # openssl req params
prompt = no
distinguished_name = dn-param
x509_extensions = extend
[dn-param] # DN fields
C = US
ST = Maryland
O = University of Maryland
OU = College Park Campus
CN = University of Maryland Root CA $CAV
1.DC = umd
2.DC = edu
emailAddress = [EMAIL PROTECTED]
[extend] # openssl extensions
subjectAltName = "DNS:umd.edu","email:[EMAIL PROTECTED]"
issuerAltName  = "DNS:umd.edu","email:[EMAIL PROTECTED]"
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always
basicConstraints = critical,CA:true
keyUsage = keyCertSign,cRLSign
nsCertType = sslCA,emailCA,objCA
nsComment = "See http://cert.umd.edu/root for details."
certificatePolicies = ia5org,@policy
[policy] # certificate policy extension data
policyIdentifier = umCPS
CPS = "http://cert.umd.edu/certpolicy";
@eof

$OPENSSL req -config $CONFFILE -x509 -sha1 -newkey rsa:2048 -days 365 \
         -passout pass:aaaaa -keyout root.key.pem -out root.cert.pem

# Generate the Intermediate certificate
# sort of sneaky use same file for config and extensions

cat <<@eof >$CONFFILE
# openssl x509 extfile params
extensions = extend
[req] # openssl req params
prompt = no
distinguished_name = dn-param
[dn-param] # DN fields
C = US
ST = Maryland
O = University of Maryland
OU = College Park Campus
CN = University of Maryland Inter $CAV
1.DC = umd
2.DC = edu
emailAddress = [EMAIL PROTECTED]
[extend] # openssl extensions
subjectAltName = "DNS:umd.edu","email:[EMAIL PROTECTED]"
issuerAltName  = "DNS:umd.edu","email:[EMAIL PROTECTED]"
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always
basicConstraints = critical,CA:true
keyUsage = keyCertSign,cRLSign
nsCertType = sslCA,emailCA,objCA
nsComment = "See http://cert.umd.edu/inter for details."
certificatePolicies = ia5org,@policy
[policy] # certificate policy extension data
policyIdentifier = 1.3.6.1.4.1.99999.1.2.1
CPS = "http://cert.umd.edu/certpolicy";
@eof

echo 01 >$SNUMFILE

$OPENSSL req -config $CONFFILE \
   -newkey rsa:2048 -passout pass:bbbbb -keyout inter.key.pem |

$OPENSSL x509 -req -sha1 -extfile $CONFFILE \
   -CAserial $SNUMFILE -days 364 -passin pass:aaaaa \
   -CA root.cert.pem -CAkey root.key.pem -out inter.cert.pem

# Generate the server certificate signing certificate
# sort of sneaky use same file for config and extensions

cat <<@eof >$CONFFILE
# openssl x509 extfile params
extensions = extend
[req] # openssl req params
prompt = no
distinguished_name = dn-param
[dn-param] # DN fields
C = US
ST = Maryland
O = University of Maryland
OU = College Park Campus
CN = University of Maryland SSL Signing $CAV
1.DC = umd
2.DC = edu
emailAddress = [EMAIL PROTECTED]
[extend] # openssl extensions
subjectAltName = "DNS:umd.edu","email:[EMAIL PROTECTED]"
issuerAltName  = "DNS:umd.edu","email:[EMAIL PROTECTED]"
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always
basicConstraints = critical,CA:true
keyUsage = keyCertSign,cRLSign
extendedKeyUsage = clientAuth,serverAuth
nsCertType = sslCA
nsComment = "See http://cert.umd.edu/ssign for details."
certificatePolicies = ia5org,@policy
[policy] # certificate policy extension data
policyIdentifier = 1.3.6.1.4.1.99999.1.2.1
CPS = "http://cert.umd.edu/certpolicy";
@eof

echo 02 >$SNUMFILE

$OPENSSL req -config $CONFFILE \
   -newkey rsa:2048 -passout pass:ccccc -keyout ssign.key.pem |

$OPENSSL x509 -req -sha1 -extfile $CONFFILE \
   -CAserial $SNUMFILE -days 363 -passin pass:bbbbb \
   -CA inter.cert.pem -CAkey inter.key.pem -out ssign.cert.pem

# Generate a server certificate from CSR in csr.pem

cat <<@eof >$CONFFILE
extensions = extend
[extend] # openssl extensions
subjectAltName = email:[EMAIL PROTECTED]
issuerAltName = "DNS:umd.edu","email:[EMAIL PROTECTED]"
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always
basicConstraints = critical,CA:false
keyUsage = critical,Key Encipherment
extendedKeyUsage = serverAuth, clientAuth
nsCertType = SSL Server
nsComment = "See http://cert.umd.edu/server for details."
certificatePolicies = ia5org,@policy
[policy] # certificate policy extension data
policyIdentifier = 1.3.6.1.4.1.4305.1.2.1
CPS = "http://cert.umd.edu/certpolicy";
@eof

echo 13 >$SNUMFILE

$OPENSSL x509 -req -sha1 -extfile $CONFFILE -in csr.pem \
   -CAserial $SNUMFILE -days 362 -passin pass:ccccc \
   -CA ssign.cert.pem -CAkey ssign.key.pem -out server.cert.pem

rm $CONFFILE $SNUMFILE

cat root.cert.pem inter.cert.pem ssign.cert.pem server.cert.pem >chain.pem

$OPENSSL x509 -noout -text -in root.cert.pem
$OPENSSL x509 -noout -text -in inter.cert.pem
$OPENSSL x509 -noout -text -in ssign.cert.pem
$OPENSSL x509 -noout -text -in server.cert.pem
[test18] zben%

--
Charles B (Ben) Cranston
mailto: [EMAIL PROTECTED]
http://www.wam.umd.edu/~zben

______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
User Support Mailing List                    [EMAIL PROTECTED]
Automated List Manager                           [EMAIL PROTECTED]

Reply via email to