Library Updates Required

Topics covered on this page

๐Ÿ“– Overview

Omise's official libraries used to rely on certificate pinning, a security technique that hardcodes the expected server certificate inside the library itself. Certificate pinning is no longer considered best practice, so it has been removed from Omise's libraries โ€” but any copy of a library still running the old, pinned version will stop trusting Omise's servers once the pinned certificate rotates. In practice, that means API requests โ€” including charge creation โ€” can fail without warning if you're running an outdated library.

There's a second, related issue: Omise's TLS certificate chain roots to a DigiCert G2 certificate. Most systems already trust it, but older or infrequently patched servers may not, and will need it installed manually.

โš ๏ธ Confirmed as of September 2026: a certificate chain check against api.omise.co shows Omise's API currently chains to DigiCert Global Root G2 (via the Thawte TLS RSA CA G1 intermediate), so the following G2 instructions are currently accurate. However, DigiCert is moving default TLS issuance to a new G5 hierarchy starting October 15, 2026 (see DigiCert's official advisory), and the current certificate expires October 9, 2026 โ€” just six days before that cutover. When this certificate is next renewed, it may be reissued from the G5 hierarchy instead. Re-verify this page's guidance after that renewal.

โš ๏ธ Two separate things to check: (1) your Omise library version, and (2) your server's trusted root certificates. Most integrations only need the first, but if requests still fail after updating your library, work through the second as well.

โ„น๏ธ What you might be seeing, by platform:

  • Python/curl/OpenSSL-based: certificate verify failed, unable to get local issuer certificate
  • Java: sun.security.validator.ValidatorException: PKIX path building failed, unable to find valid certification path to requested target
  • Android: javax.net.ssl.SSLHandshakeException: Trust anchor for certification path not found
  • Go: x509: certificate signed by unknown authority
  • iOS/Swift: NSURLErrorDomain error -1202, "server certificate is invalid"
  • Ruby/PHP/Node: SSL_connect returned=1 errno=0 ... certificate verify failed, SELF_SIGNED_CERT_IN_CHAIN, or cURL error 60

A connection reset with no other explanation, or a charge-creation request that times out with no clear API error body, can also be a symptom. If any of this looks familiar, this page is for you.

Check and fix your version in three steps

  1. Find your library's current version in your project's dependency file (see the FAQ further down this page if you're not sure where to look).
  2. Compare it against the minimum required version for your library.
  3. If you're below it, follow the update instructions for your language, then verify the fix.

Diagnose before you fix

If you want to confirm the actual problem before changing anything, inspect the certificate chain your server currently sees from a terminal:

openssl s_client -connect api.omise.co:443 -showcerts

Look at the certificate chain in the output. A chain that terminates in a root your system doesn't recognize, or a handshake that fails outright, confirms a certificate trust issue rather than something else (a network/firewall block, a DNS problem, or an application-level bug). This command works the same regardless of which language or library you use, since it tests the underlying TLS connection directly.

๐Ÿ› ๏ธ Minimum required library versions

The following table lists the minimum required version of each library, its release date, and a link to its full changelog. If you're not already on at least the listed version, upgrade before it affects your integration.

A library not listed here is not known to be affected. Check this page periodically, since that can change with future releases.

Integration Minimum required version Release date Changelog
Android 3.0.0 31 Oct 2019 CHANGELOG.md
Go 1.0.5 31 Jul 2020 tags
iOS 3.2.0 29 Aug 2019 releases
Java 3.1.1 6 Aug 2019 CHANGELOG.md
PHP 2.12.0 31 Jul 2020 CHANGELOG.md
Python 0.9.0 3 Sep 2020 CHANGELOG.md
Ruby 0.8.0 4 Nov 2019 CHANGELOG.md
EC-CUBE 2.2 5 Sep 2023 CHANGELOG.md
Magento 2.18.6 16 Sep 2021 CHANGELOG.md
OpenCart 2.5 5 Sep 2023 CHANGELOG.md
PrestaShop 1.7.10 5 Sep 2023 CHANGELOG.md
WooCommerce 4.8 19 Apr 2021 CHANGELOG.md

๐Ÿ› ๏ธ How to update each library

Each section shows a basic update example. Your build setup may differ, and any method that gets you to at least the minimum required version works.

Jump to: Android ยท iOS ยท Go ยท Java ยท PHP ยท Python ยท Ruby

SDK: Android

Update the version in your app's build.gradle:

dependencies {
    implementation 'co.omise:omise-android:3.0.0'
}
  • TLS 1.1 dropped (2.6.5 โ†’ 2.6.6): use TLS 1.2 or higher going forward. See Omise's internal TLS deprecation notice for background, or contact support@omise.co if you need the details and don't have access to it.

SDK: iOS

See the upgrade steps for Swift Package Manager. The 4.x branch no longer supports iOS 10 or Swift 4.

โš ๏ธ SDK version isn't the whole story on mobile. Android and iOS both use the device's own OS-level trust store for certificate validation, separate from your app's SDK version. A device running a very old OS version may not trust a current root certificate no matter which SDK version your app ships with โ€” there's no app-side fix for that beyond encouraging users to update their device OS.

Library: Go

Update to the latest version:

go get github.com/omise/omise-go

Update to a specific version:

go get github.com/omise/omise-go@v1.0.5

Library: Java

Update the version in your app's build.gradle:

dependencies {
    implementation 'co.omise:omise-java:3.1.1'
}
  • No breaking changes (4.x โ†’ latest): the upgrade should be smooth.
  • Breaking changes (3.1.1 โ†’ 4.0): see the migration guide. If you can't move to the latest version yet, upgrade to at least 3.1.1.

Library: PHP

โ„น๏ธ Using a PHP-based plugin? If you're on Magento or WooCommerce, follow the PHP-based Plugins instructions instead of updating omise-php directly.

Update the version in composer.json to at least the minimum required version, then run:

composer update omise-php

Upgrading from any 2.x version is straightforward with no breaking changes. Use a non-EOL PHP version if you can.

Library: Python

Update the version in requirements.txt to at least the minimum required version, then run:

pip install --upgrade omise

Upgrading from any version is straightforward with no breaking changes. Use a non-EOL Python version if you can.

Library: Ruby

Update the version in your Gemfile to at least the minimum required version, then run:

bundle update omise

Upgrading from any version is straightforward with no breaking changes. Use a non-EOL Ruby version if you can.

๐Ÿ› ๏ธ If you're not using an Omise library

The certificate-pinning issue only affects the libraries listed here. But the DigiCert root certificate issue is library-agnostic โ€” it affects the TLS connection itself, so it can affect you even if you call the Omise API directly with curl, a raw HTTP client, or a language/framework not covered on this page.

If that's your setup: the minimum-version table and per-library steps don't apply, but the diagnostic command and the server root certificate update further down this page still do. Run the diagnostic first to confirm whether this is actually your issue.

๐Ÿ› ๏ธ Updating PHP-Based plugins

โš ๏ธ Manually downgraded omise-php? Magento and WooCommerce both build on the omise-php library. If you've manually downgraded it on either platform, upgrade back to at least the minimum recommended version to close the underlying security issue.

EC-CUBE

See the official EC-CUBE plugin documentation for installation and configuration details.

Magento

See the official Magento plugin documentation for installation and configuration details.

OpenCart

See the official OpenCart plugin documentation for installation and configuration details.

PrestaShop

See the official PrestaShop plugin documentation for installation and configuration details.

WooCommerce

โ„น๏ธ Recommended version: use at least WooCommerce 5.3.1 for improved performance.

See the official WooCommerce plugin documentation for installation and configuration details.

๐Ÿ› ๏ธ Updating your server's root certificate

If API requests still fail after your library is up to date, your server's trusted root certificates are likely out of date. Omise's certificate chain roots to DigiCert Global Root G2 โ€” see DigiCert's root certificate update advisory for background.

โ„น๏ธ Running in a container or serverless platform? "Update your server" doesn't apply the same way. Your CA bundle comes from your base image (Docker) or your provider's managed runtime (AWS Lambda, Google Cloud Functions, etc.), not a persistent OS you patch directly. Rebuild your image from an up-to-date base (e.g. a current `debian:` or `alpine:` tag) rather than patching a running container, and for managed serverless runtimes, check your provider's documentation for how they roll out CA updates โ€” you typically can't do this yourself.

On Linux

Linux keeps CA certificates in /etc/ssl/certs/, and a normal OS update refreshes them automatically. To update manually:

RHEL and clones

  1. Create /etc/pki/ca-trust/source/anchors if it doesn't already exist.
  2. Download the DigiCert Global Root G2 certificate.
  3. Copy the downloaded PEM file into /etc/pki/ca-trust/source/anchors.
  4. Add it to the system's trust store:
sudo update-ca-trust extract

Debian and derivatives

  1. Create /usr/local/share/ca-certificates if it doesn't already exist.
  2. Download the DigiCert Global Root G2 certificate.
  3. Copy the downloaded PEM file into /usr/local/share/ca-certificates, renaming it with a .crt extension.
  4. Add it to the system's trust store:
sudo update-ca-certificates

On macOS

A normal macOS update refreshes root certificates automatically. To add the certificate manually, download the DigiCert Global Root G2 certificate, then add it to the System keychain and trust it for SSL, adjusting the filename in the command that follows to match what you downloaded:

sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain path/to/downloaded-certificate.crt

On Windows

A normal OS update automatically refreshes root certificates. To update manually:

Step 1: Open a Command Prompt as Administrator.

Step 2: Navigate to a working folder, for example C:\Temp.

Step 3: Run the following command, which downloads the current root certificate updates into a file named Rootstore.sst in that folder:

CertUtil --generateSSTFromWU Rootstore.sst

Step 4: If the target server has no internet access, copy Rootstore.sst from that folder to the offline machine and import it there instead of running the command directly.

๐Ÿ› ๏ธ Confirm it's fixed

After updating your library, your server's root certificates, or both, confirm the fix before moving on:

  1. Send a test request โ€” a charge creation in test mode is the most direct check, since that's the request most likely to have been failing.
  2. If it succeeds without a certificate or connection error, you're done.
  3. If it still fails the same way, work through whichever of the two fixes you haven't done yet โ€” most integrations only need the library update, but some servers also need the root certificate update.
  4. If it still fails after both, check status.omise.co to rule out a wider incident, then contact Omise support with the exact error message.

โ“ FAQ

Q: How do I check which library version I'm currently running? A: Check your dependency manifest (composer.json, requirements.txt, Gemfile, build.gradle, or your go.mod/Podfile/package manager of choice) for the pinned Omise library version, or inspect the installed package directly with your language's package manager.

Q: My library isn't listed in the minimum versions table. Am I affected? A: Not that Omise is aware of, but check this page periodically, since the list can change as new releases ship.

Q: I updated my library and requests are still failing. What else should I check? A: Update your server's trusted root certificates next โ€” see Updating Your Server's Root Certificate. Outdated server-side trust stores are the next most common cause.

Q: Do I need to do anything if I only use a hosted checkout or redirect flow, with no library installed? A: No โ€” this only applies to integrations using an Omise-provided library or plugin.

Q: I call the Omise API directly (curl, a raw HTTP client, or a language not listed here) โ€” does this affect me? A: The library-version issue doesn't, since it's specific to Omise's own libraries. The server root certificate issue can still affect you, since it's about the TLS connection itself. See If You're Not Using an Omise Library.

Q: My app is on the latest Omise SDK version, but users on older phones still get certificate errors. Why? A: Android and iOS validate certificates against the device's own OS-level trust store, separate from your app's SDK version. A device on a very old OS release may not trust a current root certificate no matter what SDK version you ship. There's no in-app fix for this beyond encouraging affected users to update their device OS.

Q: What actually breaks if I don't update? A: API requests โ€” including charge creation โ€” can start failing without warning once the certificate your library pinned to is no longer valid.

Have more questions? Contact Omise support directly.

Omise uses cookies to improve your overall site experience and collect information on your visits and browsing behavior. By continuing to browse our website, you agree to our Privacy Policy. Learn more