Misalkan Java
aplikasi 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 .p12
atau jks
pada 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
Heroku
Settings
- "Reveal the config vars"
- :
keyStoreFileName
— , "private_key.p12"keyStoreBase64
— Base64
, " .p12"keyStorePassword
— , .p12keyStoreType
— pkcs12
trustStoreType
— 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
- .
!