Dg B wrote:
> 
> Hello!
> 
>     I have been fiddling with OpenSSL now for over a week, and cannot make
> sense of this thing. :(
> I desperately need to create an Object signing certificate for my work at
> hand.  However, all of my attempts are not working.
> 
> Is there a step-by-step instruction (with explanations, preferably) on how
> to make an object signing certificate?  I can make one with signtool, but it
> will only last 3 months (not good enough).
> 
> Any help you can provide would be much appreciated.  What's left of my hair
> (after all the pulling out this week) will be appreciated as well.
> 
> Regards,
>    Dennis

You must create a CA certificate with the Netscape Object Signing CA
extension, then deliver certificates (maybe got by a Netscape browser)
with the Netscape Object Signing extension.
I attach the templates for the CA and for the end user certificates.

I have created a demo certification authority - based on OpenSSL, that
delivers Netscape Object signing certificates. The SW is freely
available at http://web.interpuntonet.it/mariofb
Unfortunately (for you) all the web pages and the related documentation
are written in Italian. However, if you can translate the documentation,
you can find also instructions on how to build object signing
certificates for Netscape, and a simple demo applet which need to be
signed to work.
The SW is written in Perl, and all the messages are put in parametric
files. If you can translate from Italian to English (or whatever
language you like) you can easily get a web based demo CA in your own
language.

Ciao
 
-- 
                                                Mario
#
# SSLeay example configuration file.
# This is mostly being used for generation of certificate requests.
#
#       Certificato con identificazione
#

#RANDFILE               = $ENV::HOME/.rnd
# N.B.: Path completa necessaria quando la shell non si sa 
#       quale sia, ad esempio quando da PHP si lancia il demone.
#
RANDFILE                = /home/ca/.rnd
oid_file                = /home/ca/.oid
#oid_section             = new_oids

####################################################################
[ ca ]
default_ca      = CA_default            # The default ca section

####################################################################
[ CA_default ]

dir             = /home/ca/demoCA               # Where everything is kept
certs           = $dir/certs            # Where the issued certs are kept
crl_dir         = $dir/crl              # Where the issued crl are kept
database        = $dir/index.txt        # database index file.
new_certs_dir   = $dir/newcerts         # default place for new certs.

certificate     = $dir/cacert.pem       # The CA certificate
serial          = $dir/serial           # The current serial number
crl             = $dir/crl.pem          # The current CRL
private_key     = $dir/private/cakey.pem# The private key
RANDFILE        = $dir/private/.rand    # private random number file

x509_extensions = usr_cert              # The extentions to add to the cert

# Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs
# so this is commented out by default to leave a V1 CRL.
# crl_extensions  = crl_ext               # Extensions to add to CRLdefault_days       
 = 365                   # how long to certify for

default_days    = 1085                  # how long to certify for
default_crl_days= 7                     # how long before next CRL
default_md      = md5                   # which md to use.
preserve        = no                    # keep passed DN ordering

# A few difference way of specifying how similar the request should look
# For type CA, the listed attributes must be the same, and the optional
# and supplied fields are just that :-)
policy          = policy_anything

# For the CA policy
[ policy_anything ]
countryName             = supplied
stateOrProvinceName     = optional
localityName            = supplied
organizationName        = supplied
organizationalUnitName  = optional
commonName              = supplied
emailAddress            = optional


####################################################################
[ req ]
default_bits            = 1024
default_keyfile         = privkey.pem
distinguished_name      = req_distinguished_name
attributes              = req_attributes
x509_extensions = v3_ca # The extentions to add to the self signed cert

[ req_distinguished_name ]
countryName                     = Country Name (2 letter code)
countryName_default             = IT
countryName_min                 = 2
countryName_max                 = 2

stateOrProvinceName             = State or Province Name (full name)
# stateOrProvinceName_default   = Some-State

localityName                    = Locality Name (eg, city)

0.organizationName              = Organization Name (eg, company)
0.organizationName_default      = The INCA Org

# we can do this but it is not needed normally :-)
#1.organizationName             = Second Organization Name (eg, company)
#1.organizationName_default     = The INCA org

0.organizationalUnitName        = Organizational Unit Name 1 (eg, section)
# 0.organizationalUnitName_default      = Home

1.organizationalUnitName        = Organizational Unit Name 2 (eg, section)
1.organizationalUnitName_default        = Tihuanaco

commonName                      = Common Name (eg, YOUR name)
commonName_max                  = 64

emailAddress                    = Email Address
emailAddress_max                = 40

[ req_attributes ]
challengePassword               = A challenge password
challengePassword_min           = 4
challengePassword_max           = 20

unstructuredName                = An optional company name


[ v3_ca]

# Extensions for a typical CA

# It's a CA certificate
#basicConstraints = CA:true

# PKIX recommendation.
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid:always,issuer:always

# This is what PKIX recommends but some broken software chokes on critical
# extensions.
basicConstraints = critical,CA:true

# Key usage: this is typical for a CA certificate. However since it will
# prevent it being used as an test self-signed certificate it is best
# left out by default.
keyUsage = cRLSign, keyCertSign

# Include email address in subject alt name: another PKIX recommendation
subjectAltName=email:copy
# Copy issuer details
issuerAltName=issuer:copy

# RAW DER hex encoding of an extension: beware experts only!
# 1.2.3.5=RAW:02:03
# You can even override a supported extension:
# basicConstraints= critical, RAW:30:03:01:01:FF

crlDistributionPoints=URI:https://aurora.space.worlds/ca-bin/crypt/c01crl.pl?a
#certificatePolicies            = "I"

# Some might want this also
nsCertType = sslCA, emailCA, objCA

nsBaseUrl                       = https://aurora.space.worlds/ca-bin/
nsCaRevocationUrl               = crypt/c01crl.pl?a
nsRevocationUrl                 = crl/check-rev.pl?
nsCaPolicyUrl                   = CPS/cps.pl?CPS=ca
nsComment                       = "Certification Authority: firma crl, e certificati 
client, email, e objsign. Le CPS si trovano alla URL: 
http://aurora.space.worlds/ca/CPS/ca.html"


[ crl_ext ]

# CRL extensions.
# Only issuerAltName and authorityKeyIdentifier make any sense in a CRL.

#issuerAltName=issuer:copy
# Commentare, se no non funziona il comando:
#       openssl ca -gencrl -config /home/ca/etc/ident.cnf
authorityKeyIdentifier=keyid:always,issuer:always
#
# SSLeay example configuration file.
# This is mostly being used for generation of certificate requests.
#
#       Certificato con identificazione
#

#RANDFILE               = $ENV::HOME/.rnd
# N.B.: Path completa necessaria quando la shell non si sa 
#       quale sia, ad esempio quando da PHP si lancia il demone.
#
RANDFILE                = /home/ca/.rnd
oid_file                = /home/ca/.oid
oid_section             = new_oids

[ new_oids ]

# We can add new OIDs in here for use by 'ca' and 'req'.
# Add a simple OID like this:
# testoid1=1.2.3.4
# Or use config file substitution like this:
# testoid2=${testoid1}.5.6
Userid=0.9.2342.19200300.100.1.1

####################################################################
[ ca ]
default_ca      = CA_default            # The default ca section

####################################################################
[ CA_default ]

dir             = /home/ca/demoCA               # Where everything is kept
certs           = $dir/certs            # Where the issued certs are kept
crl_dir         = $dir/crl              # Where the issued crl are kept
database        = $dir/index.txt        # database index file.
new_certs_dir   = $dir/newcerts         # default place for new certs.

certificate     = $dir/cacert.pem       # The CA certificate
serial          = $dir/serial           # The current serial number
crl             = $dir/crl.pem          # The current CRL
private_key     = $dir/private/cakey.pem# The private key
RANDFILE        = $dir/private/.rand    # private random number file

x509_extensions = usr_cert              # The extentions to add to the cert

# Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs
# so this is commented out by default to leave a V1 CRL.
# crl_extensions  = crl_ext               # Extensions to add to CRLdefault_days       
 = 365                   # how long to certify for

default_days    = 365                   # how long to certify for
default_crl_days= 7                     # how long before next CRL
default_md      = md5                   # which md to use.
preserve        = no                    # keep passed DN ordering

# A few difference way of specifying how similar the request should look
# For type CA, the listed attributes must be the same, and the optional
# and supplied fields are just that :-)
policy          = policy_ident

# For the CA policy
[ policy_ident ]
countryName             = supplied
stateOrProvinceName     = optional
localityName            = optional
organizationName        = match
organizationalUnitName  = optional
description             = optional
commonName              = supplied
emailAddress            = supplied
UID                     = supplied

####################################################################
[ req ]
default_bits            = 1024
default_keyfile         = privkey.pem
distinguished_name      = req_distinguished_name
attributes              = req_attributes
x509_extensions = v3_ca # The extentions to add to the self signed cert

[ req_distinguished_name ]
countryName                     = Country Name (2 letter code)
countryName_default             = IT
countryName_min                 = 2
countryName_max                 = 2

stateOrProvinceName             = State or Province Name (full name)
# stateOrProvinceName_default   = Some-State

localityName                    = Locality Name (eg, city)

0.organizationName              = Organization Name (eg, company)
0.organizationName_default      = The INCA Org

# we can do this but it is not needed normally :-)
#1.organizationName             = Second Organization Name (eg, company)
#1.organizationName_default     = The INCA org

0.organizationalUnitName        = Organizational Unit Name 1 (eg, section)
# 0.organizationalUnitName_default      = Home

1.organizationalUnitName        = Organizational Unit Name 2 (eg, section)
1.organizationalUnitName_default        = Tihuanaco

description                     = Description (eg, whatever you want)
description_max                 = 255

commonName                      = Common Name (eg, YOUR name)
commonName_max                  = 64

UID                             = Uniq ID
UID_max                         = 20
#Userid                                 = User Id
#Userid_max                     = 20

emailAddress                    = Email Address
emailAddress_max                = 40

[ req_attributes ]
challengePassword               = A challenge password
challengePassword_min           = 4
challengePassword_max           = 20

unstructuredName                = An optional company name


[ usr_cert ]

# These extensions are added when 'ca' signs a request.

# This goes against PKIX guidelines but some CAs do it and some software
# requires this to avoid interpreting an end user certificate as a CA.

basicConstraints=CA:FALSE

# Here are some examples of the usage of nsCertType. If it is omitted
# the certificate can be used for anything *except* object signing.
# For normal client use this is typical
nsCertType = client, email, objsign

nsBaseUrl                       = https://aurora.space.worlds/ca-bin/
nsCaRevocationUrl               = crypt/c01crl.pl?a
nsRevocationUrl                 = crl/check-rev.pl?
nsCaPolicyUrl                   = CPS/cps.pl?CPS=ident
nsComment                       = "Certificato con identificazione. Le CPS si trovano 
alla URL:\012 http://aurora.space.worlds/ca/CPS/ident.html"
#nsCertExt
#nsDataType

# This is typical also; ident policy allows nonRepudiation
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage=clientAuth,emailProtection,codeSigning

# PKIX recommendations
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer:always

# Import the email address.
subjectAltName=email:copy

# Copy subject details
issuerAltName=issuer:copy
#issuerAltName="Tihuanaco"

crlDistributionPoints=URI:https://aurora.space.worlds/ca-bin/crypt/c01crl.pl?a

#certificatePolicies=ia5org,1.3.5.87.2,@polsect
certificatePolicies=ia5org,@polsect

[polsect]

policyIdentifier = 1.3.5.87.2
CPS.1="http://aurora.space.worlds/ca-bin/CPS/cps.pl?CPS=ident"
#CPS.2="http://aurora.space.worlds/ca-bin/CPS/cps.pl?CPS=ident"
userNotice.1=@notice

[notice]

explicitText="Certificato con identificazione per browser e email clients"
organization="The INCA Org"
noticeNumbers=1,2


[ v3_ca]

# Extensions for a typical CA

# It's a CA certificate
basicConstraints = CA:true

# PKIX recommendation.
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid:always,issuer:always

# This is what PKIX recommends but some broken software chokes on critical
# extensions.
#basicConstraints = critical,CA:true

# Key usage: this is typical for a CA certificate. However since it will
# prevent it being used as an test self-signed certificate it is best
# left out by default.
#keyUsage = cRLSign, keyCertSign

# Some might want this also
#nsCertType = sslCA, emailCA

# Include email address in subject alt name: another PKIX recommendation
subjectAltName=email:copy
# Copy issuer details
issuerAltName=issuer:copy

# RAW DER hex encoding of an extension: beware experts only!
# 1.2.3.5=RAW:02:03
# You can even override a supported extension:
# basicConstraints= critical, RAW:30:03:01:01:FF

[ crl_ext ]

# CRL extensions.
# Only issuerAltName and authorityKeyIdentifier make any sense in a CRL.

#issuerAltName=issuer:copy
# Commentare, se no non funziona il comando:
#       openssl ca -gencrl -config /home/ca/etc/ident.cnf
authorityKeyIdentifier=keyid:always,issuer:always

Reply via email to