Warning:SecurityManager is deprecated for removal since Java 17 (JEP 411). Do not adopt for new code. Use OS-level isolation (containers), JPMS encapsulation, and input validation instead.
byte[] iv = new byte[12]; new SecureRandom().nextBytes(iv);Cipher c = Cipher.getInstance("AES/GCM/NoPadding");c.init(Cipher.ENCRYPT_MODE, key, new GCMParameterSpec(128, iv));byte[] ct = c.doFinal(plain);
Mode
Use
AES/GCM/NoPadding
Authenticated encryption (preferred)
ChaCha20-Poly1305
Modern AEAD alt
RSA/ECB/OAEPWith...
Asymmetric encryption
AES/CBC/PKCS5Padding
Legacy; use only with HMAC
7. Working with KeyStore
Type
Use
PKCS12
Default since Java 9
JKS
Legacy proprietary
Operations
load/store, getKey, getCertificate
Tool
keytool
8. Using SecureRandom
API
Use
SecureRandom.getInstanceStrong()
Strong (may block on Linux NativePRNGBlocking)
new SecureRandom()
Default (DRBG on modern JDK)
DRBG
NIST SP 800-90A; configure via SecureRandomParameters
NEVER
Use Random or Math.random() for crypto
9. Implementing SSL/TLS Connections
API
Use
SSLContext.getInstance("TLSv1.3")
TLS 1.3 (Java 11+)
init(km, tm, sr)
Key/trust managers
SSLSocketFactory / SSLEngine
Blocking / non-blocking
HttpClient
.sslContext(ctx).sslParameters(p)
Hostname verification
Enabled by default in HttpClient
10. Using JAAS (authentication, authorization)
Component
Use
LoginContext
Authenticate
LoginModule
Pluggable mechanism (Krb5, LDAP)
Subject + Principal
Identity carrier
Subject.doAs
Run-as (tied to SecurityManager — declining)
11. Understanding Security Providers
Aspect
Detail
Provider class
Registers algorithms
Built-ins
SunJCE, SunEC, SunPKCS11, SunMSCAPI
Bouncy Castle
Popular 3rd-party
Selection
Security.getProviders() or by name in getInstance()
12. Preventing Common Vulnerabilities
Vulnerability
Prevention
SQL injection
PreparedStatement with parameters
XXE
Disable DTDs in XML parsers
Deserialization RCE
ObjectInputFilter / avoid Java serialization
JNDI injection (Log4Shell)
Validate/escape user input; patch logging libs
Path traversal
Validate normalized paths against base
Command injection
ProcessBuilder with arg list (not concatenated string)