This card covers SSL/TLS certificate lifecycle management across the Oracle ERP Cloud (Fusion Cloud Applications) ecosystem. It spans three distinct certificate domains: (1) Oracle-managed SaaS TLS certificates that secure inbound connections to Fusion Applications, (2) customer-managed trust certificates in the fusion_trust.jks keystore for outbound integrations, and (3) OCI Certificates service for infrastructure-level certificate management.
| Property | Value |
|---|---|
| Vendor | Oracle |
| System | Oracle ERP Cloud (Fusion Cloud Applications), Release 24C/25A |
| API Surface | REST, SOAP, FBDI (certificate management is transport-layer) |
| Current Release | 25A (February 2025 quarterly update) |
| Editions Covered | Enterprise (SaaS) |
| Deployment | Cloud |
| API Docs | Oracle Cloud Security Documentation |
| Status | GA |
Certificate management in Oracle ERP Cloud does not use a single API surface. Certificates are managed through multiple interfaces depending on the certificate scope.
| Certificate Scope | Management Interface | Format | Automation | Who Manages |
|---|---|---|---|---|
| SaaS TLS (inbound) | Oracle-managed (no customer action) | X.509 | Automatic 6-month renewal | Oracle |
| Outbound trust (fusion_trust.jks) | Self-service UI or SR (11.12.1.0.0+) | PEM, Base64 DER | Manual import required | Customer |
| OIC adapter certificates | OIC Console > Settings > Certificates | JKS, CER, CRT | Manual upload; filter by expiry | Customer |
| OCI infrastructure certificates | OCI Console / REST API / CLI | PEM | Auto-renewal configurable | Customer or OCI-managed |
| Middleware wallets (on-prem/hybrid) | WLST, orapki, Fusion Middleware Control | Oracle Wallet (PKCS#12), JKS | Script-automatable via orapki | Customer |
| Signing keys (OIC) | OIC Console > Settings > Certificates | PKCS1, PKCS8 | Manual upload | Customer |
| Limit Type | Value | Applies To | Notes |
|---|---|---|---|
| Max certificates per OIC instance | ~500 | Oracle Integration Cloud | Practical limit; no hard documented cap |
| Max CAs per OCI tenancy | Service-limit dependent | OCI Certificates service | Request increase via support |
| Max certificates per OCI CA | 1,000 (default) | OCI Certificates service | Configurable via service limit increase |
| JKS private key password | Single shared password | All private keys in a JKS file | Different passwords per key prevent extraction |
| Limit Type | Value | Window | Notes |
|---|---|---|---|
| SaaS TLS renewal cycle | Every 6 months | Per certificate | Oracle-managed; no customer control over timing |
| OCI certificate auto-renewal | Configurable | Per certificate policy | Set renewal rules in OCI Certificates service |
| Oracle wallet auto-login validity | No expiry | Until explicitly rotated | Auto-login wallets (cwallet.sso) do not expire |
| Self-signed cert validity (FMW) | 5 years | From creation | Fusion Middleware Control default |
| Interface | Auth Method | Access Level | Notes |
|---|---|---|---|
| Fusion Applications self-service | Fusion Apps login (SAML/SSO) | Security Administrator role | For fusion_trust.jks imports |
| OIC Console | OIC admin credentials | ServiceAdministrator role | Upload trust/identity certificates |
| OCI Console | OCI IAM (API key or session) | Certificate-Manager policy | Manage OCI Certificates service |
| WLST (Middleware) | WebLogic admin credentials | WebLogic Admin | connect('weblogic','password') |
| orapki (CLI) | OS-level access + wallet password | File system permissions | No network auth required |
START -- Certificate management for Oracle ERP Cloud
|-- What type of certificate operation?
| |-- Inbound TLS (clients connecting to Oracle ERP)
| | |-- SaaS environment?
| | | |-- YES --> Oracle-managed, no action needed (6-month auto-renewal)
| | | +-- NO (on-prem/hybrid) --> Manage via WLST or FMW Control
| | +-- Need custom domain certificate?
| | |-- YES --> Not supported for SaaS; use OCI LB for custom domains
| | +-- NO --> Oracle default certificate applies automatically
| |-- Outbound SSL (Oracle ERP calling external services)
| | |-- External CA already in fusion_trust.jks?
| | | |-- YES --> No action needed
| | | +-- NO --> Import CA cert via self-service or SR
| | |-- Need mutual TLS (two-way SSL)?
| | | |-- YES --> Upload identity cert (.jks) to OIC + trust cert to target
| | | +-- NO --> Trust certificate import only
| | +-- Using Oracle Integration Cloud (OIC) as middleware?
| | |-- YES --> Upload via OIC Console > Settings > Certificates
| | +-- NO --> Import directly into fusion_trust.jks
| |-- OCI infrastructure certificates
| | |-- Need auto-renewal?
| | | |-- YES --> Use OCI Certificates service with renewal policy
| | | +-- NO --> Import third-party cert manually
| | +-- Load balancer SSL termination?
| | |-- YES --> Associate cert via OCI LB configuration
| | +-- NO --> Apply cert to specific OCI service
| +-- Certificate rotation / renewal
| |-- SaaS TLS renewal?
| | +-- Oracle handles automatically; re-download if using stored certs
| |-- Integration partner certificates?
| | +-- Monitor expiry; re-import before expiration
| +-- OCI managed certificates?
| +-- Configure auto-renewal policy in OCI Certificates service
+-- Certificate format conversion needed?
|-- PEM to JKS --> keytool -importcert
|-- JKS to PKCS#12 --> orapki wallet jks_to_pkcs12
|-- PKCS#12 to JKS --> orapki wallet pkcs12_to_jks
+-- DER to PEM --> openssl x509 -inform der -outform pem
| Format | fusion_trust.jks | OIC | Oracle Wallet | OCI Certificates | Notes |
|---|---|---|---|---|---|
| PEM (.pem, .crt) | Yes (Base64) | Yes (.cer, .crt) | Yes (orapki or WLST) | Yes | Most compatible format |
| DER (.der binary) | No (use orapki) | No | Yes (orapki only) | No | Convert to PEM first |
| JKS (.jks) | N/A (is a keystore) | Yes (identity certs) | Convert via orapki | No | Java-specific format |
| PKCS#12 (.p12, .pfx) | No (extract first) | No | Yes (native format) | No | Oracle Wallet native |
| PKCS#7 (.p7b) | No | No | Yes (chain import) | No | Certificate chain format |
| PKCS1/PKCS8 (keys) | N/A | Yes (signing keys) | N/A | N/A | OIC signing key upload |
| Operation | Command | Notes |
|---|---|---|
| List certificates | keytool -list -keystore fusion_trust.jks -storepass <pwd> | View all trusted CAs |
| Import CA cert | keytool -importcert -alias <alias> -file ca.pem -keystore fusion_trust.jks | Add external CA trust |
| Export certificate | keytool -exportcert -alias <alias> -keystore fusion_trust.jks -file cert.pem -rfc | PEM format with -rfc flag |
| Delete certificate | keytool -delete -alias <alias> -keystore fusion_trust.jks | Remove expired/revoked cert |
| Check expiry | keytool -list -v -keystore fusion_trust.jks | grep "Valid from" | Monitor expiration dates |
| Import PKCS#12 to JKS | keytool -importkeystore -srckeystore cert.p12 -srcstoretype PKCS12 -destkeystore dest.jks | Format conversion |
Identify which certificate domain you are working with and what is currently configured. [src1, src3]
# For OCI infrastructure -- list certificates in your tenancy
oci certs-mgmt certificate list --compartment-id <compartment_ocid> --all
# For JKS keystore -- list contents
keytool -list -v -keystore fusion_trust.jks -storepass <password>
Verify: Check output for certificate aliases, expiry dates, and issuer chains. Any certificate expiring within 30 days needs attention.
When Oracle ERP Cloud needs to call an external HTTPS endpoint whose CA is not already trusted, import the CA certificate chain. [src5]
# Download the external service's CA certificate chain
openssl s_client -connect api.external-service.com:443 -showcerts </dev/null 2>/dev/null \
| openssl x509 -outform PEM > external_ca.pem
# Import into fusion_trust.jks
keytool -importcert -alias external-service-ca \
-file external_ca.pem -keystore fusion_trust.jks \
-storepass <password> -noprompt
Verify: keytool -list -keystore fusion_trust.jks -alias external-service-ca should display the certificate details.
For integrations routed through Oracle Integration Cloud, upload via the OIC Console. [src1]
Trust certificates (outbound SSL validation):
1. OIC Console > Settings > Certificates
2. Click Upload
3. Certificate Type: X.509 (SSL Transport)
4. Category: Trust
5. Enter alias name (e.g., "external-api-ca-2026")
6. Browse and select the .cer or .crt file
7. Click Upload
Identity certificates (mutual TLS / two-way SSL):
1. Same navigation
2. Certificate Type: X.509 (SSL Transport)
3. Category: Identity
4. Select .jks keystore file
5. Enter keystore password + key alias passwords
Verify: Certificate appears in OIC Certificates list with status "Active" and correct expiration date.
For OCI infrastructure certificates, use the OCI Certificates service to enable automatic renewal. [src2]
# Issue a certificate with auto-renewal
oci certs-mgmt certificate create-by-generating-internally \
--compartment-id <compartment_ocid> \
--name "erp-api-endpoint" \
--certificate-config '{...}' \
--certificate-rules '[{"ruleType":"CERTIFICATE_RENEWAL_RULE","renewalInterval":"P90D","advanceRenewalPeriod":"P30D"}]'
Verify: oci certs-mgmt certificate get --certificate-id <cert_ocid> shows renewal rules and next scheduled date.
Oracle automatically renews SaaS TLS certificates every 6 months. Update stored certificates after each renewal. [src3, src7]
# Check when the current Oracle SaaS certificate expires
openssl s_client -connect <instance>.oraclecloud.com:443 \
-servername <instance>.oraclecloud.com </dev/null 2>/dev/null \
| openssl x509 -noout -dates
# Download the new certificate after renewal
openssl s_client -connect <instance>.oraclecloud.com:443 -showcerts \
</dev/null 2>/dev/null | openssl x509 -outform PEM > oracle_new.pem
# Update your integration's trust store
keytool -delete -alias oracle-fusion-saas -keystore integration_trust.jks -storepass <pwd>
keytool -importcert -alias oracle-fusion-saas -file oracle_new.pem \
-keystore integration_trust.jks -storepass <pwd> -noprompt
Verify: Test the integration endpoint. A successful HTTPS connection confirms the new certificate is trusted.
# Input: Oracle ERP Cloud hostname
# Output: Certificate expiry report with days-until-expiry
import ssl, socket, datetime, json
def check_oracle_cert_expiry(hostname, port=443):
context = ssl.create_default_context()
with socket.create_connection((hostname, port), timeout=10) as sock:
with context.wrap_socket(sock, server_hostname=hostname) as ssock:
cert = ssock.getpeercert()
not_after = datetime.datetime.strptime(
cert['notAfter'], '%b %d %H:%M:%S %Y %Z')
days_left = (not_after - datetime.datetime.utcnow()).days
return {
'hostname': hostname,
'not_after': not_after.isoformat(),
'days_until_expiry': days_left,
'needs_renewal': days_left < 30,
'critical': days_left < 7
}
result = check_oracle_cert_expiry('instance.fa.us2.oraclecloud.com')
print(json.dumps(result, indent=2))
#!/bin/bash
# Input: Oracle ERP Cloud hostname
# Output: Full certificate chain saved as PEM files
HOST="${1:-instance.fa.us2.oraclecloud.com}"
OUTPUT_DIR="./oracle_certs_$(date +%Y%m%d)"
mkdir -p "$OUTPUT_DIR"
openssl s_client -connect "$HOST:443" -servername "$HOST" \
-showcerts </dev/null 2>/dev/null > "$OUTPUT_DIR/full_chain.pem"
openssl s_client -connect "$HOST:443" -servername "$HOST" \
</dev/null 2>/dev/null | openssl x509 -outform PEM > "$OUTPUT_DIR/leaf.pem"
openssl x509 -in "$OUTPUT_DIR/leaf.pem" -noout -subject -issuer -dates
# Input: Oracle ERP Cloud instance URL
# Output: SSL handshake details and certificate info
curl -vvv --head "https://instance.fa.us2.oraclecloud.com/" \
2>&1 | grep -E "(SSL|TLS|subject|issuer|expire|CN)"
# Test with specific TLS version
curl --tlsv1.2 --head "https://instance.fa.us2.oraclecloud.com/" \
-w "HTTP Code: %{http_code}\nSSL Verify: %{ssl_verify_result}\n" \
-o /dev/null -s
| Source Format | Target Format | Tool | Command | Gotcha |
|---|---|---|---|---|
| PEM | DER | openssl | openssl x509 -in cert.pem -outform DER -out cert.der | DER is binary; cannot paste into text fields |
| DER | PEM | openssl | openssl x509 -in cert.der -inform DER -outform PEM -out cert.pem | Required before most Oracle tool imports |
| PEM | JKS | keytool | keytool -importcert -file cert.pem -keystore store.jks | Import CA chain in correct order |
| JKS | PKCS#12 | keytool | keytool -importkeystore -srckeystore in.jks -destkeystore out.p12 -deststoretype PKCS12 | PKCS#12 is Oracle Wallet native format |
| PKCS#12 | JKS | orapki | orapki wallet pkcs12_to_jks ... | orapki required; keytool alternative exists |
| PEM key + cert | PKCS#12 | openssl | openssl pkcs12 -export -in cert.pem -inkey key.pem -out bundle.p12 | Include -chain for full chain |
| Error | Meaning | Cause | Resolution |
|---|---|---|---|
| SSLHandshakeException | SSL handshake failure | Missing or expired CA in trust store | Import CA certificate chain into fusion_trust.jks or OIC |
| PKIX path building failed | Chain validation failure | Intermediate CA missing | Import complete chain, not just leaf cert |
| ValidatorException | Certificate not trusted | Self-signed or unknown CA | Import CA cert to trust store |
| certificate_unknown alert | Server rejects client cert | Wrong client cert | Verify client cert matches server expectation |
| ORA-28759 | Wallet open failure | Wrong password or corrupted wallet | Verify password; recreate if corrupted |
| ORA-28864 | SSL connection closed | TLS version mismatch | Update client to TLS 1.2+ |
| Keystore tampered with | JKS integrity failure | Wrong password or corruption | Verify password; restore from backup |
| OIC upload fails | Format not recognized | Wrong extension or encoding | Convert to PEM; use .cer or .crt extension |
Test outbound connectivity after any certificate change with a simple REST call. [src5]Never pin to leaf certificate; trust the CA chain. Set calendar reminders for 6-month cycle. [src3]Download full chain via openssl s_client -showcerts. [src4]Use -keypass identical to -storepass when creating JKS. [src1]Set permissions to 600 owned by application user. [src4]Update client libraries to TLS 1.2+ and verify cipher suite compatibility. [src7]# BAD -- pinning to the leaf cert that Oracle rotates every 6 months
openssl s_client -connect instance.oraclecloud.com:443 </dev/null 2>/dev/null \
| openssl x509 -outform PEM > pinned_cert.pem
# Hardcoding the SHA-256 fingerprint -- WILL break at next renewal
# GOOD -- trust the Certificate Authority, which persists across renewals
openssl s_client -connect instance.oraclecloud.com:443 -showcerts </dev/null 2>/dev/null \
| awk '/BEGIN CERTIFICATE/,/END CERTIFICATE/{print}' | tail -n +2 > ca_chain.pem
keytool -importcert -alias oracle-ca -file ca_chain.pem \
-keystore integration_trust.jks -storepass changeit -noprompt
# BAD -- importing only the server's leaf certificate
keytool -importcert -alias external-api -file external_leaf_only.pem \
-keystore fusion_trust.jks -storepass <password>
# Breaks when the external service renews its leaf cert
# GOOD -- import root CA and intermediate CAs
openssl s_client -connect api.external.com:443 -showcerts </dev/null 2>/dev/null \
| awk 'BEGIN{c=0} /BEGIN CERT/{c++} c>0{print > "cert_"c".pem"} /END CERT/{}'
# Import intermediate and root CAs (skip cert_1.pem which is the leaf)
for f in cert_2.pem cert_3.pem; do
alias=$(openssl x509 -in "$f" -noout -subject -nameopt rfc2253 | sed 's/subject=//')
keytool -importcert -alias "$alias" -file "$f" \
-keystore fusion_trust.jks -storepass <password> -noprompt
done
# BAD -- same wallet password for dev and prod
orapki wallet create -wallet /prod/wallet -pwd Welcome1 -auto_login
orapki wallet create -wallet /dev/wallet -pwd Welcome1 -auto_login
# GOOD -- unique passwords stored in secret manager
PROD_PWD=$(openssl rand -base64 32)
DEV_PWD=$(openssl rand -base64 32)
# Store in OCI Vault, then create wallets
orapki wallet create -wallet /prod/wallet -pwd "$PROD_PWD" -auto_login
orapki wallet create -wallet /dev/wallet -pwd "$DEV_PWD" -auto_login
Implement automated monitoring with alerts at 30, 14, and 7 days before expiry. [src2]Extract and import the complete chain using openssl s_client -showcerts. [src4]Run dos2unix on PEM files before import. [src6]Use a recognized CA for all environments. [src4]Trust the CA chain, not the leaf cert. Add Oracle's renewal schedule to your ops calendar. [src3]Set to 600 owned by the application user. [src4]# Check Oracle ERP Cloud endpoint certificate
openssl s_client -connect instance.fa.us2.oraclecloud.com:443 \
-servername instance.fa.us2.oraclecloud.com </dev/null 2>/dev/null \
| openssl x509 -noout -subject -issuer -dates -serial
# Test TLS version support
openssl s_client -connect instance.fa.us2.oraclecloud.com:443 \
-tls1_2 </dev/null 2>/dev/null | grep "Protocol :"
# List all certs in JKS keystore
keytool -list -v -keystore fusion_trust.jks -storepass <password>
# Verify a certificate chain
openssl verify -CAfile ca_chain.pem server_cert.pem
# List Oracle Wallet contents
orapki wallet display -wallet /path/to/wallet
# Check OCI for expiring certificates
oci certs-mgmt certificate list --compartment-id <ocid> \
--lifecycle-state ACTIVE --all
# Inspect a PEM certificate file
openssl x509 -in certificate.pem -text -noout
| Release | Date | Status | Certificate Changes | Migration Notes |
|---|---|---|---|---|
| 25A | 2025-02 | Current | TLS 1.3 support expanded | No breaking changes for TLS 1.2 clients |
| 24C | 2024-11 | Supported | OCI Certificates service enhancements | Auto-renewal rules now support custom intervals |
| 24B | 2024-08 | Supported | TLS 1.3 enforcement for new instances | Older TLS 1.0/1.1 clients must upgrade |
| 24A | 2024-02 | Supported | Certificate import self-service expanded | More formats accepted in OIC Console |
| 23D | 2023-11 | Supported | OCI Certificates improvements | Cert-to-LB association simplified |
| 11.12.1.0.0 | 2017 | Legacy | Self-service cert import for fusion_trust.jks | First release with customer-accessible trust store |
Oracle Fusion Cloud follows a quarterly release cadence (24A, 24B, 24C, 25A). TLS protocol changes are announced at least one release in advance. TLS 1.0 and 1.1 have been deprecated since 2020 and are blocked on all Oracle Cloud endpoints. [src7]
| Use When | Don't Use When | Use Instead |
|---|---|---|
| Securing outbound calls from Oracle ERP to third-party APIs | Managing Oracle Autonomous Database mTLS wallets | Oracle ADB wallet rotation docs |
| Importing external CA certs into fusion_trust.jks | Configuring OAuth 2.0 API authentication | Oracle ERP Cloud REST API auth guide |
| Monitoring Oracle SaaS TLS certificate renewal cycles | Setting up OCI network security groups | OCI network security docs |
| Converting between PEM, JKS, PKCS#12, and Oracle Wallet | Managing SSH keys for OCI compute | OCI compute SSH key management |
| Setting up mutual TLS for high-security integrations | Configuring IDCS federation | IDCS federation configuration guide |