FMW 12c (Forms/Reports) mit Adminport

Ich möchte an dieser Stelle versuchen einmal eine Anleitung (primär für mich) zu erstellen, um eine FMW 12c Umgebung so umzustellen, das die gesamte Administration nur über den Admin Port läuft. Es wird mit Sicherheit mehr als nur diese Lösung geben aber diese läuft bei mir. Um das ganze ans laufen zu bringen sind mehrere Schritte notwendig. Ich gehe im Moment auch davon aus, daß ich ein Zertifikat selbst erstelle.

Folgende Schritte habe ich ausfindig machen können, ein grober Überblick

1) Erstellen Verzeichnisse
2) anpassen openssl.conf
3) erstellen ROOT CA (nur für Selbstsigniert)
4) NodeManager anpassen
5) Anpassen wlst.sh
6) Admin Server auf SSL
7) Umsetzten AdminPort

Ich fange mit dem erstellen meiner Umgebung an. Dazu gehören ein paar Verzeichnisse in denen ich Dateien ablegen möchte.

mkdir -p /u03/oracle/etc/ssl/CA/private
mkdir -p /u03/oracle/etc/ssl/jks
mkdir -p /u03/oracle/etc/ssl/newcerts

Ich möchte mein eigenes Zertifikat mit openssl erstellen daher werde ich noch ein paar Dateien dazu packen müssen

Erstellen der notwendigen Random Dateien
cd /u03/oracle/etc/ssl
#### hier werden die Zertifkate verwaltet
touch index.txt
#### Zufallszahl
echo 1000 > serial
#### Password welches als Private Key Passwort genutzt wird
export TRUST_KEYSTORE_PASS=Weblogic654
echo ${TRUST_KEYSTORE_PASS}>password.txt
cp password.txt CA/private/>

Bereit stellen der openssl.conf aus Vorlage (evtl.Anpassen )

folgende Punkte in der openssl sind angepasst
[ CA_default ]
dir = /u03/oracle/etc/ssl # Where everything is kept
unique_subject = no # Set to 'no' to allow creation of
default_days = 3650 # how long to certify for
default_md = sha256 # which md to use.
# [ policy_match ]
countryName = optional
stateOrProvinceName = optional
organizationName = optional
# [ req ]
default_bits = 4096
# [ req_distinguished_name ]
countryName_default = DE
stateOrProvinceName_default = Schleswig-Holstein
localityName_default = Wedel
0.organizationName_default = Jan-Peter Timmermann Consulting
organizationalUnitName_default = Middleware Administration
#### Neue Abschnitte die dazu kommen am Ende
[ root_ca_extensions ]
basicConstraints = CA:true
keyUsage = keyCertSign, cRLSign
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
# This really needs to be in place for it to be a proxy certificate.
#proxyCertInfo=critical,language:id-ppl-anyLanguage,pathlen:3,policy:foo
[ client_ca_extensions ]
basicConstraints = CA:false
keyUsage = keyEncipherment,nonRepudiation, digitalSignature, keyAgreement
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer
[ server_ca_extensions ]
basicConstraints = CA:false
keyUsage = keyEncipherment,nonRepudiation, digitalSignature, keyAgreement
extendedKeyUsage = 1.3.6.1.5.5.7.3.1,1.3.6.1.5.5.7.3.2
subjectKeyIdentifier=hashauthorityKeyIdentifier=keyid,issuer

erstellen des ROOTCA mit openssl

cd /u03/oracle/etc/ssl
openssl genrsa -aes256 -passout file:password.txt \
-out CA/private/ca.key.pem 4096 -config ./openssl.cnf
openssl req -new -x509 -days 3650 -passin file:password.txt \
-key CA/private/ca.key.pem -sha256 \
-out CA/private/ca.cert.pem \
-subj '/C=DE/ST=Schleswig-Holstein/L=Wedel\
/O=Jan-Peter Timmermann Consulting\
/OU=Middleware Administration\
/CN=Middleware\
/emailAddress=administrative-not-existent-address@aura.de\
/subjectAltName=DNS.1=www.aura.jptu.de' \
-config ./openssl.cnf -extensions root_ca_extensions

jetzt ist das RootCA in der Datei ca.cert.pem

Keystore erstellen und Zertifikats Anfrage erstellen (fuer jeden Server)

/u03/oracle/product/JAVA/jdk/bin/keytool -genkey -alias auraPlayer \
-keyalg RSA -keysize 2048 \
-dname 'CN=aura.jptu.de,\
OU=Middleware Administration,\
O=Jan-Peter Timmermann Consulting,\
L=Wedel,ST=Schleswig-Holstein,C=DE'\
-keypass Weblogic654 \
-keystore jks/AuraPlayer.jks -storepass Weblogic654
/u03/app/oracle/product/JAVA/jdk/bin/keytool -certreq -alias auraPlayer \
-keystore jks/AuraPlayer.jks \
-storepass Weblogic654 -file jks/AuraPlayer.csr

jetzt ist der KeyStore erstellt (AuraPlayer.jks) und die Zertifikats Anfrage generiert (AuraPlayer.csr).

jks/AuraPlayer.csr and die Zertifizierungsstelle versenden ! 

Dies kann ich jetzt an eine CA senden und das Ergebnis wieder einspielen oder aber ich mache das selbst:

Ab hier der Abschnitt gilt nur wenn ich selber Signiere ############################

cp jks/AuraPlayer.csr CA/private/
cd CA/private/
openssl ca -keyfile ca.key.pem -cert ca.cert.pem \
-extensions client_ca_extensions \
-passin file:password.txt -days 365 \
-md sha256 -inAuraPlayer.csr \
-out AuraPlayer.cert.pem -config ../../openssl.cnf

Zertifikat ist in AuraPlayer.cert.pem

Bis hier er Abschnitt gilt nur wenn ich selber Signiere #########################

Jetzt kommt das Zertifikat von der CA zurück (in diesem Falle per copy)

cp ca.cert.pem ../../jks/
cp AuraPlayer.cert.pem ../../jks/
cd /u03/oracle/etc/ssl/jks

erstellen des User Identity KeyStore und importieren des RootCa

/u03//oracle/product/JAVA/jdk/bin/keytool -import -trustcacerts \
-alias rootcacert -keystore AuraPlayer.jks \
-file ca.cert.pem -storepass Weblogic654

das Signierte Zertifikat importieren in den User Identity Store

/u03/oracle/product/JAVA/jdk/bin/keytool -import -alias AuraPlayer \
-keystore AuraPlayer.jks -file AuraPlayer.cert.pem\
-keypass Weblogic654 -storepass Weblogic654

erstellen des Trusted Keystore

/u03/oracle/product/JAVA/jdk/bin/keytool -import -v -noprompt \
-trustcacerts -alias rootCA -file ca.cert.pem \
-keystore TrustStore.jks -storepass Weblogic654

Dann werden alle Informationen in das Weblogic Verzeichnis kopiert

cp *.jks /u03//oracle/user_projects/domains/FormsDomain/config/

Die Zertifikate stehen jetzt im /u03/oracle/user_projects/domains/FormsDomain/config/ zur Verfügung.

NodeManager anpassen:

Damit der NodeManager mit den neuen KeyStores reden kann müssen in der NodeManager.properties ein paar Anpassungen gemacht werden.

CipherSuites=TLS_RSA_WITH_AES_128_CBC_SHA,SSL_RSA_WITH_RC4_128_SHA
KeyStores=CustomIdentityAndCustomTrust
CustomIdentityKeyStoreFileName=/u01/app/oracle/user_projects/domains/FormsDomain/config/AuraPlayer.jks
CustomIdentityPrivateKeyPassPhrase=Weblogic654
CustomIdentityKeyStorePassPhrase=Weblogic654
CustomTrustKeyStoreFileName=/u01/app/oracle/user_projects/domains/FormsDomain/config/TrustStore.jks
CustomIdentityAlias=AuraPlayer

Anpassen wlst.sh

um per wlst.sh auf die Umgebung zugreifen zu können muss wlst wist wo der *jks liegt daher wird eine „wrapper“ start Datei gebaut (wl.sh)

#!/bin/bash
WLST_PROPERTIES="${WLST_PROPERTIES} -Dweblogic.security.TrustKeyStore=CustomTrust "
WLST_PROPERTIES="${WLST_PROPERTIES} -Dweblogic.security.CustomTrustKeyStoreFileName='/u03/oracle/user_projects/domains/FormsDomain/config/TrustStore.jks' "
WLST_PROPERTIES="${WLST_PROPERTIES} -Dweblogic.security.CustomTrustKeyStoreType=JKS "
WLST_PROPERTIES="${WLST_PROPERTIES} -Dweblogic.security.IgnoreHostNameVerification=true "
export WLST_PROPERTIES
/u03/oracle/product/Middleware/oracle_common/common/bin/wlst.sh "$@"

Admin Server auf SSL einstellen (noch keinen AdminPort)

import sys , os, fileinput
v_adminportssl=7201
v_uKeystore=Weblogic654
v_uKeystorePass=Weblogic654
v_tKeystore=TrustStore.jks
v_tKeystorePass=Weblogic654
v_Alias=AuraPlayer
v_PW=Welcome1
try:
    print " Anmeldung am Admin Server ..........."
    connect('weblogic',v_PW,'url=t3://localhost:7001')
except:
    print "======================================================================================"
    print "konnte mich nicht am Admin Server anmelden"
    print "Programm wird beendet"
   print "======================================================================================"
    exit()
edit()
startEdit()
DomainName=cmo.getName()
RootDir=cmo.getRootDirectory()
print "======================================================================================"
print "Der Domain Name ist :"+DomainName
cd('/')
serverList=cmo.getServers()
for s in serverList:
    ServerName = s.getName()
    if ServerName == "AdminServer":
       print "Server ist : "+ServerName
       cd('/Servers/AdminServer')
      cmo.setKeyStores('CustomIdentityAndCustomTrust')
       cmo.setCustomIdentityKeyStoreType('jks')
       cmo.setCustomIdentityKeyStoreFileName(RootDir+'/config/'+v_uKeystore)
       cmo.setCustomIdentityKeyStorePassPhrase(v_uKeystorePass)
       cmo.setCustomTrustKeyStoreFileName(RootDir+'/config/'+v_tKeystore)
       cmo.setCustomTrustKeyStoreType('jks')
       cd('/Servers/'+ServerName+'/SSL/'+ServerName)
       try:
           cmo.setEnabled(true);
           print v_adminportssl
           set('ListenPort',v_adminportssl);
           cmo.setServerPrivateKeyAlias(v_Alias)
           cmo.setHostnameVerificationIgnored(true);
           cmo.setHostnameVerifier(None);
           cmo.setTwoWaySSLEnabled(false);
           cmo.setClientCertificateEnforced(false);
           activate()
           startEdit()
          set('Ciphersuites',jarray.array([String('SSL_RSA_WITH_RC4_128_MD5'), String('TLS_RSA_WITH_AES_128_CBC_SHA'), String('SSL_RSA_WITH_RC4_128_SHA')], String))
       except:
           print "Fehler, es wird alles rueckgaengig gemacht!"
           cancelEdit("Die Anwendung wird abgebrochen")
          exit()
       cd('/Servers/AdminServer')
       # cmo.setListenPortEnabled(false)
       cmo.setClientCertProxyEnabled(false)
       cmo.setJavaCompiler('javac')
       cd('/Servers/AdminServer/ServerDiagnosticConfig/AdminServer')
       cmo.setWLDFDiagnosticVolume('Low')
    else:
       print "Server ist : "+ServerName
       cd('/Servers/'+ServerName)
       cmo.setKeyStores('CustomIdentityAndCommandLineTrust')
       cmo.setCustomIdentityKeyStoreType('jks')
       cmo.setCustomIdentityKeyStoreFileName(RootDir+'/config/'+v_uKeystore)
       cmo.setCustomIdentityKeyStorePassPhrase(v_uKeystorePass)
       cmo.setCustomTrustKeyStoreFileName(RootDir+'/config/'+v_tKeystore)
       cmo.setCustomTrustKeyStoreType('jks')
       cd('/Servers/'+ServerName+'/SSL/'+ServerName)
       cmo.setServerPrivateKeyAlias(v_Alias)
       cmo.setServerPrivateKeyPassPhrase(v_uKeystorePass)
       cmo.setExportKeyLifespan(500)
       cmo.setUseServerCerts(false)
       cmo.setSSLRejectionLoggingEnabled(true)
       cmo.setAllowUnencryptedNullCipher(false)
       cmo.setInboundCertificateValidation('BuiltinSSLValidationOnly')
       cmo.setOutboundCertificateValidation('BuiltinSSLValidationOnly')
       cmo.setHostnameVerificationIgnored(true)
       cmo.setHostnameVerifier(None)
       cmo.setTwoWaySSLEnabled(false)
       cmo.setClientCertificateEnforced(false)
       cd('/Servers/'+ServerName+'/ServerStart/'+ServerName)
       vWert=cmo.getArguments()
       vWert=vWert+' -Dweblogic.security.TrustKeyStore=CustomTrust -Dweblogic.security.CustomTrustKeyStoreFileName='+RootDir+'/config/'+v_tKeystore+' -Dweblogic.security.CustomTrustKeyStorePassPhrase='+v_tKeystore+' -Dweblogic.security.SSL.ignoreHostnameVerification=true -Dssl.debug=true -Dssl.debug=true '
       cmo.setArguments(vWert)
       cmo.setUsername('weblogic')
       cmo.setPassword(v_PW)
showChanges()
save()
activate()
exit()

 

Umsetzten AdminPort

#!/usr/bin/python
v_adminport=7001;
v_adminportssl=7201;
v_middleware=/u03/oracle/Middleware;
import sys , os, fileinput
nmConnect('weblogic','welcome1',domainName='FormsDomain',host='localhost',port='5556')
try:
    connect('weblogic','welcome1','url=t3://localhost:7001')
except:
    print "konnte mich nicht am Admin Server anmelden"
    print "Programm wird beendet"
    exit()
cd('/')
serverList=cmo.getServers()
for s in serverList:
    ServerName = s.getName()
    if ServerName != "AdminServer":
       print "Server ist : "+ServerName
       try:
          nmKill(ServerName)
       except:
           print "ServerName : "+ ServerName + " bereits runer gefahren";
       edit()
       startEdit()
       cd('/Servers/'+ServerName)
       vWert=cmo.getListenPort()
       vWert=vWert+201
       cmo.setAdministrationPort(vWert)
       save()
       activate()
cd('/')
ServerName= "AdminServer"
cd('/Servers/'+ServerName)
edit()
startEdit()
cmo.setAdministrationPort(9102)
cmo.setAdministrationPortEnabled(true)
save()
activate()
exit()
Werbung

Diskussionen

Es gibt noch keine Kommentare.

Kommentar verfassen

Bitte logge dich mit einer dieser Methoden ein, um deinen Kommentar zu veröffentlichen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden /  Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden /  Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden /  Ändern )

Verbinde mit %s

%d Bloggern gefällt das: