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()
Diskussionen
Es gibt noch keine Kommentare.