Document 3002237.1
Document 3002237.1
1
Copyright (c) 2025, Oracle. All rights reserved. Oracle Confidential.
EBS Signing of JAR files with a Private CA with Examples (Doc ID 3002237.1)
In this Document
Goal
Solution
Section 1: Introduction
Section 2: Generate Keypair and Certificate Signing Request
Section 3: Import your Certificates
Section 4: Regenerate Jar Files
Section 5. Import the RootCA into the Java on the Client
Section 6. Expected Results and Verifcation
APPLIES TO:
Oracle E-Business Suite Technology Stack - Version 11.5.10.0 to 12.2 [Release 11.5 to 12.2]
Information in this document applies to any platform.
This is a supplement for Note 1591073.1 - Signing JAR Files for Oracle E-Business Suite to include steps and sample
Internal CA
GOAL
To provide detailed example of signing and trusting EBS Jar files using a private CA with examples
This is a supplement document to Note 1591073.1 Please review that document for further details
SOLUTION
Section 1: Introduction
Historically, customers have relied on commerical Certificate Authorities (CAs) because their root certificates were
preloaded into Java. This convenience meant no changes were required on the desktop. However, as of June 1st, 2023,
all new commercial CAs for code signing must utilize Hardware Security Modules (HSMs). The adoption of HSMs
significantly alters how JAR files are signed and managed. Interestingly, managing root certificates on clients now
becomes easier than handling JAR files via HSM.
This note outlines an alternative approach involving the use of a Private CA, complete with practical examples. Opting
for a Private CA enables seamless signing of JAR files through adadmin and facilitates error-free launches of forms,
eliminating warnings. However, it's important to note that this method requires the Root certificate to be imported into
the Java environment on the PC to establish the necessary chain of trust. This step is necessary as opposed to
commercial CAs, whose root certificates are already included in the JRE's default truststore.
https://support.oracle.com/epmos/faces/DocumentDisplay?_adf.ctrl-state=bc3lk9kaa_109&id=3002237.1 1/13
3/20/25, 12:33 PM Document 3002237.1
Benefits
---------
Consistency: EBS Jar signing remains unchanged, unlike the dynamic nature of HSM-based signing.
Cost-Effective: Generating the certificate in-house, using private CA eliminates costs associated with commerical
certificates.
Certificate Management: The Private CA provides a long-living certificate, unlike commercial options.
Caveats
----------
Desktop Managment: Ensure the Root certificate is imported into the Java environment on the PC.
Certificate Revocation List (CRL): If using the CA mentioned in Appendix A, maintaining the CRL file is essential,
see CRL Managment
After generating your Keypair and CSR you will need to submit the CSR to your private CA, if you do not have one
follow Appendix A to create one
<JRI_DATA_LOC> = $APPL_TOP_NE/ad/admin
<JRI_DATA_LOC> = $APPL_TOP/admin
$ cd <JRI_DATA_LOC>
Use the alias option and take note of what was used, as it will be needed for CSR creation and importing the
certificate into the keystore
Example
Version 12.2.0
NOTE: You may not use this utility for custom development
unless you have written permission from Oracle Corporation.
https://support.oracle.com/epmos/faces/DocumentDisplay?_adf.ctrl-state=bc3lk9kaa_109&id=3002237.1 2/13
3/20/25, 12:33 PM Document 3002237.1
Enter the COMMON NAME [ ] : Oracle Support
Enter keystore password: Re-enter new password: Enter key password for <ATG>
(RETURN if same as keystore password): Re-enter new password:
Warning:
The JKS keystore uses a proprietary format. It is recommended to migrate to PKCS12 which is an industry standard format using
"keytool -importkeystore -srckeystore /u02/apps/fs_ne/EBSapps/appl/ad/admin/adkeystore.dat -destkeystore
/u02/apps/fs_ne/EBSapps/appl/ad/admin/adkeystore.dat -deststoretype pkcs12".
adjkey is complete.
cd <JRI_DATA_LOC>
$ adjkey -certreq -sigalg SHA256withRSA -file adkeystore.csr
Example
cd <JRI_DATA_LOC>
$ adjkey -certreq -sigalg SHA256withRSA -file adkeystore.csr
Copyright (c) 2002, 2012 Oracle Corporation
Redwood Shores, California, USA
Version 12.2.0
NOTE: You may not use this utility for custom development
unless you have written permission from Oracle Corporation.
https://support.oracle.com/epmos/faces/DocumentDisplay?_adf.ctrl-state=bc3lk9kaa_109&id=3002237.1 3/13
3/20/25, 12:33 PM Document 3002237.1
The above Java program completed successfully.
adjkey is complete.
Submit your certificate signing request 'adkeystore.csr' to your Internal (Private CA) for signing
Note: Be sure to request a Java Code Signing Certificate in PEM format. This certificate can be used to sign your jar
content across one or multiple Oracle E-Business Suite environments.
- If you are using the private CA from this note follow B.1 Sign a Code Signing Certificate Signing Request (CSR) to
sign it
Create a PEM file by combing the root, intermediate(s), and code-siging certificates
If you have any intermediate certificates in your chain of trust, ensure that they are included in the command above. If
you have more than one intermediate certificate you must import them in chain of trust order starting with the one that
directly follows the root certificate.
Note not all CAs will have an intermeidate certificate, and if you are using a CA from this note there will not be one.
cd <JRI_DATA_LOC>
$ adjkey -import -file adkeystore.pems -noprompt
Example
cd <JRI_DATA_LOC>
admin]$ adjkey -import -file adkeystore.pems -noprompt
Copyright (c) 2002, 2012 Oracle Corporation
Redwood Shores, California, USA
Version 12.2.0
NOTE: You may not use this utility for custom development
unless you have written permission from Oracle Corporation.
adjkey is complete.
Source your APPS env file and shutdown your application tier services.
Shut down the application tier services:
$ adstpall.sh
$ adadmin
Enter yes when prompted with: Do you wish to force regeneration of all jar files? [No] ? yes
Once your jar files have been successfully generated, restart the application tier.
$ adstrtal.sh
Download your CA root certificate for example, <root>.crt to the desktop and then follow the instructions for your
desktop operating system.
1. Open the 'Java Control Panel' on your desktop and select the 'Security' (tab).
https://support.oracle.com/epmos/faces/DocumentDisplay?_adf.ctrl-state=bc3lk9kaa_109&id=3002237.1 5/13
3/20/25, 12:33 PM Document 3002237.1
2. Click Manage Certificates to open the 'Certificates' Window
5. Close the 'Certificates' window and the 'Java Control Panel'. The certificate should now be installed in the Java 'Signer
CA' store.
1. Go to System Settings
2. Click on the Java menu item to access the Java Control Panel.
https://support.oracle.com/epmos/faces/DocumentDisplay?_adf.ctrl-state=bc3lk9kaa_109&id=3002237.1 7/13
3/20/25, 12:33 PM Document 3002237.1
3. Import Root certificate using same steps from Windows instructions above
When attempting to launch Java content the following message window should pop:
Check "Do not show this again for apps from the publisher and location above"
(This will install the certificate into Java's 'Trusted Certificates' store and stop this message appearing
when accessing this environment in future)
Click the "Run" button
NOTE: While these Steps have been tested and vetted, they are NOT supported by Oracle Support,
and have been provided as an example only!
CRL Management
By default, Java validates the certificates' validity and checks for revocation status using CRL (Certificate Revocation
List). The CRL is a web file accessible via HTTP. The CRL file location is specified within the certificates generated by
the Private CA. Without access to this file, forms will launch with warnings, or may not launch at all with an errror.
Therefore, it's crucial to determine its hosting location, making it accessible to all end-users.
https://support.oracle.com/epmos/faces/DocumentDisplay?_adf.ctrl-state=bc3lk9kaa_109&id=3002237.1 8/13
3/20/25, 12:33 PM Document 3002237.1
Here are three options:
Option 1: Host the CRL on a standalone web server, where the Private CA may also be installed.
Option 2: Host the CRL on your Production EBS application server since it is likely to be accessible most of the
time. Note that to host it on EBS, you must ensure HTTP accessibility. To validate, attempt to access the robots.txt
file via HTTP at http://<webentryhost>.<webentrydomain>:80 for LBR or <web_port>/robots.txt. For example,
http://ebs.oracle.com:80/robots.txt.
Option 3: Disable CRL check on the client's Java console. Here's how:
Note: Although it's not recommended, it's considered safe assuming Java is solely used for forms on the PC (as
licensed).
Additionally, disabling the check can result in faster form launches as it skips the revocation check process when the
forms launch.
Create CA Directory
mkdir ~/ebsJarCA
cd ~/ebsJarCA
Note for your use you must choose values that reflect your host and domain where you are going to host the CLR in the
[default] section and your organization information in the [ca_dn] section. Change values < > and Bold to the required
values. if you are going to host the CRL on EBS make sure to use the PRODUCTION URL as that server will be up most
of the time
https://support.oracle.com/epmos/faces/DocumentDisplay?_adf.ctrl-state=bc3lk9kaa_109&id=3002237.1 9/13
3/20/25, 12:33 PM Document 3002237.1
[ca_default]
home = .
database = $home/db/index
serial = $home/db/serial
crlnumber = $home/db/crlnumber
certificate = $home/$name.crt
private_key = $home/private/$name.key
RANDFILE = $home/private/random
new_certs_dir = $home/certs
unique_subject = no
copy_extensions = none
default_days = 3653
default_crl_days = 3653
default_md = sha256
policy = policy_c_o_match
[policy_c_o_match]
countryName = supplied
stateOrProvinceName = optional
organizationName = supplied
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
[req]
default_bits = 4096
encrypt_key = yes
default_md = sha256
utf8 = yes
string_mask = utf8only
prompt = no
distinguished_name = ca_dn
req_extensions = ca_ext
[ca_ext]
basicConstraints = critical,CA:true,pathlen:0
keyUsage = critical,keyCertSign,cRLSign
subjectKeyIdentifier = hash
[crl_info]
URI.0 = $crl_url
[issuer_info]
caIssuers;URI.0 = $aia_url
EOF
https://support.oracle.com/epmos/faces/DocumentDisplay?_adf.ctrl-state=bc3lk9kaa_109&id=3002237.1 10/13
3/20/25, 12:33 PM Document 3002237.1
The generated (ebsca.key) is the private key and needs to be securely kept.
openssl ca -selfsign \
-config ebsca.conf \
-in ebsca.csr \
-out ebsca.crt \
-extensions ca_ext
Enter pass phrase for ./private/ebsca.key:
The generated ebsca.crt is the root CA certificate that the Forms clients must trust.
openssl's ca command keeps track of issued certificates in the text file db/index
openssl ca -gencrl \
-config ebsca.conf \
-out ebsca.crl
The generated ebsca.crl is used by clients to check the revocation status of a certificate, without this file there were
will be an error launching forms, this file will also be used for EACH EBS instance that shares the code signing
certificate, if you are going to host this file on EBS it is best to put on your PRODUCTION node
Copy ebsca.crl to each application server on the EBS application tier for production to $INST_TOP/portal (for EBS 12.2
also copy to PATCH FS)
(However, if you are going to host the CRL in another URL, that you have specified in config file then copy it to that
location)
cp ebsca.crl $INST_TOP/portal
Hint - You can also copy the root certificate (ebsca.crt) to the same location for easy download by end users to
install on their PCs if required
EOF
At this point, you should have a fully functional CA that can be used to perform the following operations:
The newly generated code.crt and existing root (ebsca.crt) will have to be returned to the requestor for import into EBS
JAR signing keystore file (adkeystore.dat)
openssl's ca command keeps track of issued certificates in the text file db/index
If a certificate is revoked, the CRL file must be regenerated, and copied to the server
https://support.oracle.com/epmos/faces/DocumentDisplay?_adf.ctrl-state=bc3lk9kaa_109&id=3002237.1 12/13
3/20/25, 12:33 PM Document 3002237.1
Back up and Copy Files
Back up the files listed below on the target instance substituting, for example:
$ cp -p $APPL_TOP_NE/ad/admin/adsign.txt
$NE_BASE/EBSapps/appl/ad/admin/adsign.txt.presign
$ cp -p $APPL_TOP_NE/ad/admin/adkeystore.dat
$NE_BASE/EBSapps/appl/ad/admin/adkeystore.presign
$ cp -p $APPL_TOP/admin/adsign.txt $APPL_TOP/admin/adsign.txt.presign.
$ cp -p $APPL_TOP/admin/adkeystore.dat $APPL_TOP/admin/adkeystore.dat.presign
Copy the files taken from your source environment to the directory listed above on your target environment as
appropriate to your Oracle E-Business Suite release.
Regenerate the jar files on the Target instance using the 'force' option through adadmin, see Section 4: Regenerate the
jar Files.
History
Initial Publication
REFERENCES
https://support.oracle.com/epmos/faces/DocumentDisplay?_adf.ctrl-state=bc3lk9kaa_109&id=3002237.1 13/13