{"record":{"id":"bb4f532b076fbac8","repo":"aeron-io/aeron","slug":"error","errorCode":"ERROR","errorMessage":"unable to create SecureRandom for algorithm=${secureRandomAlgorithm}","messagePattern":"unable to create SecureRandom for algorithm=(.+?)","errorType":"exception","errorClass":"AeronException","httpStatus":null,"severity":"error","filePath":"aeron-archive/src/main/java/io/aeron/archive/Archive.java","lineNumber":3654,"sourceCode":"         * @return instance of SecureRandom\n         * @throws AeronException if there is a problem resolving the algorithm\n         */\n        public SecureRandom secureRandom()\n        {\n            try\n            {\n                if (\"strong\".equalsIgnoreCase(secureRandomAlgorithm))\n                {\n                    return SecureRandom.getInstanceStrong();\n                }\n                else\n                {\n                    return SecureRandom.getInstance(secureRandomAlgorithm);\n                }\n            }\n            catch (final NoSuchAlgorithmException ex)\n            {\n                throw new AeronException(\n                    \"unable to create SecureRandom for algorithm=\" + secureRandomAlgorithm, ex, ERROR);\n            }\n        }\n\n        CountDownLatch abortLatch()\n        {\n            return abortLatch;\n        }\n\n        void concludeRecordChecksum()\n        {\n            if (null == recordChecksum)\n            {\n                final String checksumClass = Configuration.recordChecksum();\n                if (!Strings.isEmpty(checksumClass))\n                {\n                    recordChecksum = Checksums.newInstance(checksumClass);\n                }","sourceCodeStart":3636,"sourceCodeEnd":3672,"githubUrl":"https://github.com/aeron-io/aeron/blob/6d60124e15e35c11b49ba2e3c2c2858a09a18803/aeron-archive/src/main/java/io/aeron/archive/Archive.java#L3636-L3672","documentation":"Archive's secureRandomSupplier obtains a java.security.SecureRandom via SecureRandom.getInstance(algorithm). If the JVM provider does not support the configured algorithm, NoSuchAlgorithmException is caught and rethrown as an AeronException with error code ERROR. This is a fatal configuration/JVM-provider mismatch.","triggerScenarios":"Setting Archive.Context.secureRandomAlgorithm(...) (or a custom secureRandomSupplier path) to an algorithm name unavailable in the JDK's security providers, e.g. a platform-specific name.","commonSituations":"Running on a trimmed JVM or FIPS environment where the default provider set differs; copying an algorithm name from different JDK documentation.","solutions":["Use a widely supported algorithm name such as 'SHA1PRNG' or 'NativePRNG', or null to use the default SecureRandom constructor.","Check available algorithms via Security.getProviders() / java.security to pick a supported one.","Install a security provider that implements the desired algorithm before archive startup."],"exampleFix":"// before\nctx.secureRandomAlgorithm(\"Windows-PRNG\"); // on Linux JVM\n// after\nctx.secureRandomAlgorithm(\"SHA1PRNG\");","handlingStrategy":"validation","validationCode":"try {\n    SecureRandom.getInstance(secureRandomAlgorithm);\n} catch (NoSuchAlgorithmException e) {\n    throw new IllegalArgumentException(\"Unsupported SecureRandom algorithm: \" + secureRandomAlgorithm, e);\n}","typeGuard":null,"tryCatchPattern":"try {\n    Archive.launch(ctx);\n} catch (AeronException e) {\n    if (e.getMessage().startsWith(\"unable to create SecureRandom\")) {\n        ctx.secureRandomAlgorithm(\"SHA1PRNG\"); // fall back to a widely supported algorithm\n    }\n}","preventionTips":["Use standard algorithm names (SHA1PRNG, NativePRNG, DRBG) or leave null for the default","Verify algorithm availability in the target JVM/providers before deployment"],"tags":["aeron","archive","security","jvm"],"backgroundTag":"invalid-config-value","analyzedSha":"6d60124e15e35c11b49ba2e3c2c2858a09a18803","analyzedAt":"2026-09-12T11:17:07.683Z","contentChangedAt":"2026-09-12T11:17:07.683Z","schemaVersion":2},"datasetVersion":"2026-09-19T12:17:13.211Z"}