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, orcURL 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
- 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).
- Compare it against the minimum required version for your library.
- 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
- Create
/etc/pki/ca-trust/source/anchorsif it doesn't already exist. - Download the DigiCert Global Root G2 certificate.
- Copy the downloaded PEM file into
/etc/pki/ca-trust/source/anchors. - Add it to the system's trust store:
sudo update-ca-trust extract
Debian and derivatives
- Create
/usr/local/share/ca-certificatesif it doesn't already exist. - Download the DigiCert Global Root G2 certificate.
- Copy the downloaded PEM file into
/usr/local/share/ca-certificates, renaming it with a.crtextension. - 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:
- 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.
- If it succeeds without a certificate or connection error, you're done.
- 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.
- 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.
๐ Related content
Have more questions? Contact Omise support directly.