Misalkan Javaaplikasi kita di -host di platform Heroku dan perlu terhubung ke server HTTP yang memerlukan penyediaan Sertifikat Klien.
Dalam artikel ini, kami akan membahas masalah menyimpan keystores klien dengan aman , menggunakan .
- Menyimpan kata sandi dan data sensitif lainnya
adalah praktik umum untuk aplikasi yang dihosting .
Biasanya terkandung dalam file yang dilindungi kata sandi - wadah utama, seperti .p12atau jkspada sistem file.
Tetapi masalahnya menjadi jelas segera setelah itu perlu untuk menempatkan aplikasi serupa di :
Bahkan kata sandi yang dilindungi tidak dapat ditempatkan di repositori bersama dengan kode sumber.
Hal yang sama berlaku untuk gambar Docker dan artefak serupa lainnya yang tersedia untuk beberapa orang.
Untungnya, ini mudah diperbaiki di aplikasi Java!
Pertimbangkan proses yang diusulkan dalam hal teori keselamatan:
- Petugas Keamanan (OB) mengekspor
sebagai string yang disandikanBase64 - ..
( Heroku Dashboard) - ..
Base64 - ,
:
- :
Java - :
Heroku - :
Gradle - :
PKCS12
.p12
, , :
Heroku
HerokuSettings- "Reveal the config vars"
- :
keyStoreFileName — , "private_key.p12"keyStoreBase64 — Base64, " .p12"keyStorePassword — , .p12keyStoreType — pkcs12trustStoreType — jks
.p12 Gradle
guild.gradle stage:
task initKeyStore() {
doLast {
println("Creating keystore file from environment variables.")
String keyStoreFileName = System.getenv("keyStoreFileName")
if (keyStoreFileName != null) {
String keyStoreBase64 = System.getenv("keyStoreBase64")
new File(keyStoreFileName).withOutputStream {
it.write(Base64.decoder.decode(keyStoreBase64))
}
}
}
}
stage.dependsOn(initKeyStore)
"procfile" Heroku
"procfile" Heroku .
, shell — runApp.sh.
runApp.sh:
java \
-Dserver.port=$PORT \
...
-Djavax.net.ssl.keyStoreType=$keyStoreType \
-Djavax.net.ssl.trustStoreType=$trustStoreType \
-Djavax.net.ssl.keyStore=$keyStoreFileName \
-Djavax.net.ssl.keyStorePassword=$keyStorePassword \
$JAVA_OPTS \
...
git (push) (commit):
git update-index --chmod=+x runApp.sh
git commit -m ' runApp.sh'
git push origin master
Heroku 32 .
, .
- ,
Heroku, Gradle P12 . - ,
procfile, Heroku . , .p12 Java- .
!