if [ "$1" == "--all" ]; then
     CATYPES='trusted'
-    #CATYPES='trusted fake big expired'
+    ## CATYPES='trusted fake big expired'
     ALL='yes'
     shift
 else
         return 
     fi
 
-    openssl req -out $filebase.req -new -keyout $filebase.priv -config $REQ_CONFIG_FILE
+    CMD="openssl req -out $filebase.req -new -keyout $filebase.priv -config $REQ_CONFIG_FILE"
+    echo $CMD; $CMD;
 
     case $flags in
         client|server|clientserver|fclient|none)
             echo "Generating a $flags certificate"
-            openssl ca -in $filebase.req -out $filebase.cert -outdir tmp \
-                -md md5 -config $CA_CONF -batch -extensions ca_$flags -days $validity
+            echo $CA_DIR
+            CMD="openssl ca -in $filebase.req -out $filebase.cert -outdir tmp \
+                         -md md5 -config $CA_CONF -batch -extensions ca_$flags -days $validity"
+            echo $CMD; $CMD
             ;;
         *)
             echo "Unknown flags: $flags"
 
 function create_cert_proxy {
     filebase=$1
+    export FILEBASE=${filebase}
     export CN=$2
     ending=$3
     export PROXYNAME=$4
     echo "         in files named $filebase$ending.(cert|priv)"
     echo "         with $validity days validity time"
 
-    #TODO: write the body
+    CMD="openssl req -out ${filebase}.proxy.req -new -keyout ${filebase}.proxy.priv \
+                 -config ${REQ_PROXY_CONFIG_FILE}"
+    echo $CMD; $CMD
+    CMD="openssl ca -in ${filebase}.proxy.req -cert ${filebase}.cert \
+                    -keyfile ${filebase}.priv \
+                    -out ${filebase}.proxy.cert \
+                    -outdir . \
+                    -config ${CA_CONF} -md md5 -days 2 -batch \
+                    -verbose -passin pass:${PASSWORD}"
+    echo $CMD; $CMD
+    openssl x509 -in ${filebase}.proxy.cert -text > ${filebase}.proxy.cert.tmp
+    cp ${filebase}.proxy.cert.tmp ${filebase}.proxy.cert
+
+    openssl pkcs12 -in ${filebase}.proxy.cert.tmp -out ${filebase}.proxy.p12 -export \
+                   -inkey ${filebase}.proxy.priv -passin pass:$PASSWORD -passout pass:$PASSWORD \
+                   -name "${catype} proxy certificate" -certfile ${filebase}.cert
+
+    cp ${filebase}.proxy.cert ${filebase}.grid_proxy
+    openssl rsa -in ${filebase}.proxy.priv -passin pass:$PASSWORD >> ${filebase}.grid_proxy
+    cat ${filebase}.cert >> ${filebase}.grid_proxy
+
 }
 
 function create_cert_proxy_proxy {
 
 # create some certificates and copy them to convenient locations
 function create_some {
-    # generating host certificate
+    # generating client certificate
     create_cert $CERT_DIR/${catype}_client "$LOGNAME client" client $DAYS
 
-    # generating client certificate
+    # generating host certificate
     create_cert $CERT_DIR/${catype}_server "$HOSTNAME server" server $DAYS
 
     # generating CRL
 
 # create all certificates
 function create_all {
+
+    # If we have the trusted CA, then generate a user cert/key pair
+    # And also a host cert/key pair.
+
+    if [ "$catype" == "trusted" ]; then
+        # Create a user and host certificate
+        create_cert $CERT_DIR/${catype}_client "$LOGNAME" client $DAYS
+        create_cert $CERT_DIR/${catype}_server "$HOSTNAME" server $DAYS
+        # And put them in the stage directory.
+        cp $CERT_DIR/${catype}_client.cert ../../../usercert.pem
+        cp $CERT_DIR/${catype}_client.priv ../../../userkey.pem
+        cp $CERT_DIR/${catype}_server.cert ../../../hostcert.pem
+        cp $CERT_DIR/${catype}_server.priv ../../../hostkey.pem
+    fi
+
     # create valid certs with proxies
     create_cert $CERT_DIR/${catype}_client "$catype client" client $DAYS
     create_cert_proxy $CERT_DIR/${catype}_client "$catype client" _proxy "proxy" $DAYS
 
     # generating CRL
     openssl ca -gencrl -crldays 10000 -out $CA_DIR/${catype}.crl -config $CA_CONF
+
 }
 
 ############################## main ################################
 BASEDIR="$BASEDIR/share/test/certificates"
 mkdir -p $BASEDIR
 cd $BASEDIR
+echo "Current directory now: `pwd`"
 mkdir -p tmp
 ABSBASEDIR=$(pwd)
 
         continue
     fi
     if [ -d "$CA_DIR" ]; then
-        echo "CA directory already exists: $CA_DIR"
+        echoclean "CA directory already exists: $CA_DIR"
     else
         cp -a $CONFIGDIR/${catype}-ca $CA_DIR
     fi
 
 # cleaning up temp
 rm tmp/*.pem
+rmdir tmp