Production Error restarting BW process - receive lljava.lang.ExceptionInInitializerError and digest error for SHA1

Production Error restarting BW process - receive lljava.lang.ExceptionInInitializerError and digest error for SHA1

book

Article ID: KB0092550

calendar_today

Updated On:

Products Versions
TIBCO ActiveMatrix BusinessWorks -
Not Applicable -

Description

Resolution:
Problem Description:

When attempting to start a BW engine, the engine would produce the following stack trace:

C:\TIBCO\tra\domain\NAB_PRD\application\CommonALE_core>"C:/tibco/bw/5.3/bin/bwengine.exe" --run --propFile "C:/tibco/tra/domain/NAB_PRD/application/CommonALE_core/CommonALE_core-CALE_svc.tra"
Using property file C:\tibco\tra\domain\NAB_PRD\application\CommonALE_core\CommonALE_core-CALE_svc.tra
Using work space directory C:\tibco\tra\domain\NAB_PRD\application\CommonALE_core\working\CommonALE_core-CALE_svc
Creating trace file C:\tibco\tra\domain\NAB_PRD\application\logs\CommonALE_core-CALE_svc.log
Using XMLReader org.apache.xerces.parsers.SAXParser
2007 Jun 27 11:09:10:671 GMT +10 BW.CommonALE_core-CALE_svc Info [BW-Core] BWENGINE-300001 Process Engine version 5.3.3, build V6, 2006-08-29
2007 Jun 27 11:09:10:671 GMT +10 BW.CommonALE_core-CALE_svc Info [BW-Core] BWENGINE-300009 BW Plugins: version 5.3.3, build V6, 2006-08-29
2007 Jun 27 11:09:10:671 GMT +10 BW.CommonALE_core-CALE_svc Info [BW-Core] BWENGINE-300010 XML Support: TIBCOXML Version 5.3.3.003 of Wed, Jul 19, 2006 11:36 PDT on golden
2007 Jun 27 11:09:10:671 GMT +10 BW.CommonALE_core-CALE_svc Info [BW-Core] BWENGINE-300011 Java version: Java HotSpot(TM) Server VM 1.5.0_06-b05
2007 Jun 27 11:09:10:671 GMT +10 BW.CommonALE_core-CALE_svc Info [BW-Core] BWENGINE-300012 OS version: x86 Windows 2003 5.2
2007 Jun 27 11:09:12:250 GMT +10 BW.CommonALE_core-CALE_svc Error [BW-Core] BWENGINE-100001 null
java.lang.ExceptionInInitializerError
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:164)
    at com.tibco.security.impl.c.init(SecurityVendor.java)
    at com.tibco.security.impl.c.init(SecurityVendor.java)
    at com.tibco.security.impl.f.init(CryptoVendor.java)
    at com.tibco.security.impl.f.getInstance(CryptoVendor.java)
    at com.tibco.security.Crypto.undo(Crypto.java:75)
    at com.tibco.security.ObfuscationEngine.decrypt(ObfuscationEngine.java:274)
    at com.tibco.objectrepo.mapper.GSVMapper.prepareAssocFromXML(GSVMapper.java:170)
    at com.tibco.objectrepo.mapper.NodesMapper.callPrepareAssocFromXML(NodesMapper.java:729)
    at com.tibco.objectrepo.mapper.GSVMapper.map(GSVMapper.java:126)
    at com.tibco.objectrepo.object.ObjectProvider.readDefaultVars(ObjectProvider.java:3453)
    at com.tibco.objectrepo.object.ObjectProvider.loadDefaultVars(ObjectProvider.java:3394)
    at com.tibco.objectrepo.object.ObjectProvider.loadDefaultVars(ObjectProvider.java:3389)
    at com.tibco.objectrepo.object.ObjectProvider.loadDefaultVars(ObjectProvider.java:3389)
    at com.tibco.objectrepo.object.ObjectProvider.loadDefaultVars(ObjectProvider.java:3389)
    at com.tibco.objectrepo.object.ObjectProvider.loadDefaultVars(ObjectProvider.java:3389)
    at com.tibco.objectrepo.object.ObjectProvider.&ltinit>(ObjectProvider.java:142)
    at com.tibco.pe.core.RepoLoader.&ltinit>(RepoLoader.java:112)
    at com.tibco.pe.PEMain.if(PEMain.java:272)
    at com.tibco.pe.PEMain.a(PEMain.java:157)
    at com.tibco.pe.PEMain.&ltinit>(PEMain.java:144)
    at com.tibco.pe.PEMain.main(PEMain.java:82)
Caused by: java.lang.SecurityException: Self-Integrity Check FAILED: java.lang.SecurityException: SHA1 digest error for org/w3c/www/http/HttpAcceptEncodingList.class
    at com.entrust.toolkit.security.provider.JCEVerifierImpl.checkIntegrity(Unknown Source)
    at com.entrust.toolkit.security.provider.Entrust.&ltinit>(Unknown Source)
    at com.entrust.toolkit.security.provider.Initializer.setProviders(Unknown Source)
    at com.tibco.security.impl.entrust61.SecurityVendorImpl.&ltclinit>(SecurityVendorImpl.java:37)
    ... 23 more

The same EAR was deployed across 4 different machines. 2 of the BW engines are deployed into production machines, and the other 2 are deployed to their backup servers.

The problems of starting up the BW engine only happened on machineA. The same machine also has their primary TIBCO Admin server running. When the customer tried to restart their TIBCO Administrator, their Admin server was also showing similar stack trace to BW.
==================
Root cause analysis:

This exception is not due to any SSL certificates or difference in ear file between installations, but due to corruption of enttoolkit.jar in that particular installation. This particular jar file is a "signed" jar file from entrust, which means integrity checks have been put in place by entrust to make sure no class within this jar file gets updated or modified by anyone else other than entrust. This particular class HttpAcceptEncodingList.class has a SHA-1 digest of

Name: org/w3c/www/http/HttpAcceptEncodingList.class
SHA1-Digest: 6e5xuxCucpPs1wCYDY45mL5rjg0=

in the Manifest.mf file inside the enttoolkit.jar, if anybody updates or modifies or corrupts this class file, then SHA-1 digest of the new class will differ from that of the above value.

For example, I extracted this class out of enttoolkit.jar and modified the class constructor to include an extra println statement as below:-

HttpAcceptEncodingList()
    {
        a = null;
        isValid = false;
    System.out.println("HttpAcceptEncodingList initialized");
    }

then recompiled this class and put it back into enttoolkit.jar. Now the SHA-1 digest of this class becomes

SHA1(HttpAcceptEncodingList.class)= 79d057aa23a03ec256801575dc7be332f105760a

which is different value from what is present it the jar manifest. One easy way to verify the integrity of any jar file is to use jarsigner tool from Sun. This tool will check this modified jar and throw the error below:-

C:\entrust&gtjarsigner -verify enttoolkit.jar -verbose
jarsigner: java.lang.SecurityException: SHA1 digest error for org/w3c/www/http/H
ttpAcceptEncodingList.class

Consequently, when you replace the original enttoolkit.jar from C:\TIBCO\tpcl\5.5\lib\entrust with the modified enttoolkit.jar and start any BW project, the below error will be thrown

-----------BW console-----------
2007 Jun 28 11:19:59:292 GMT -7 BW.BVISWANA-LT-T42 Error [BW-Core] BWENGINE-1000
01 null
java.lang.ExceptionInInitializerError
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:164)
        at com.tibco.security.impl.c.init(SecurityVendor.java)
        at com.tibco.security.impl.c.init(SecurityVendor.java)
        at com.tibco.security.impl.f.init(CryptoVendor.java)
        at com.tibco.security.impl.f.getInstance(CryptoVendor.java)
        at com.tibco.security.Crypto.undo(Crypto.java:75)
        at com.tibco.security.ObfuscationEngine.decrypt(ObfuscationEngine.java:2
74)
        at com.tibco.plugin.share.security.IdentityUtilities.a(IdentityUtilities
.java:101)
        at com.tibco.plugin.share.security.IdentityUtilities.a(IdentityUtilities
.java:77)
        at com.tibco.plugin.share.security.IdentityUtilities.fetchIdentity(Ident
ityUtilities.java:65)
        at com.tibco.plugin.tibrv.RVSSLContext.initializeRVForSSL(RVSSLContext.j
ava:59)
        at com.tibco.plugin.NewRVResourceFactory.createResourceManagerInstance(N
ewRVResourceFactory.java:226)
        at com.tibco.pe.core.Engine.getResourceInstance(Engine.java:417)
        at com.tibco.plugin.tibrv.RVPubActivity.init(RVPubActivity.java:125)
        at com.tibco.pe.core.TaskImpl.init(TaskImpl.java:300)
        at com.tibco.pe.core.WorkflowBuilder.a(WorkflowBuilder.java:232)
        at com.tibco.pe.core.WorkflowBuilder.build(WorkflowBuilder.java:145)
        at com.tibco.pe.core.WorkflowLoader.setWorkflows(WorkflowLoader.java:113
)
        at com.tibco.pe.core.WorkflowLoader.loadWorkflows(WorkflowLoader.java:86
)
        at com.tibco.pe.core.JobPoolConfigurator.a(JobPoolConfigurator.java:192)

        at com.tibco.pe.core.JobPoolConfigurator.do(JobPoolConfigurator.java:100
)
        at com.tibco.pe.core.JobPool.&ltinit>(JobPool.java:302)
        at com.tibco.pe.core.JobPoolCreator.init(JobPoolCreator.java:81)
        at com.tibco.pe.core.JobPoolCreator.&ltinit>(JobPoolCreator.java:73)
        at com.tibco.pe.PEMain.if(PEMain.java:319)
        at com.tibco.pe.PEMain.a(PEMain.java:161)
        at com.tibco.pe.PEMain.&ltinit>(PEMain.java:148)
        at com.tibco.pe.PEMain.main(PEMain.java:86)
Caused by: java.lang.SecurityException: Self-Integrity Check FAILED: java.lang.S
ecurityException: SHA1 digest error for org/w3c/www/http/HttpAcceptEncodingList.
class
        at com.entrust.toolkit.security.provider.j.a(Unknown Source)
        at com.entrust.toolkit.security.provider.Initializer.checkToolkitIntegri
ty(Unknown Source)
        at com.entrust.toolkit.security.provider.Entrust.&ltinit>(Unknown Source)
        at com.entrust.toolkit.security.provider.Initializer.setProviders(Unknow
n Source)
        at com.tibco.security.impl.entrust61.SecurityVendorImpl.&ltclinit>(Securit
yVendorImpl.java:37)
        ... 29 more

job dispatcher with 8 threads, max queued = 0
2007 Jun 28 11:20:18:195 GMT -7 BW.BVISWANA-LT-T42 Info [BW-Core] BWENGINE-30000
6 Engine BVISWANA-LT-T42 terminating
----------------------------------------------------------


So, the resolution of this problem is to replace the faulty enttoolkit.jar from TPCL that is being used by Adminsitrator and BW with the enttoolkit.jar from an installation where this project starts up fine or they can reinstall TRA.

Issue/Introduction

Production Error restarting BW process - receive lljava.lang.ExceptionInInitializerError and digest error for SHA1