Supposons que notre Javaapplication soit hébergée sur la plate-forme Heroku et doit se connecter à un serveur HTTP qui nécessite la fourniture d'un certificat client.
Dans cet article, nous aborderons les problÚmes de stockage sécurisé des fichiers de clés client dans , en utilisant .
- La conservation des mots de passe et autres données sensibles
est une pratique courante pour les applications hébergées sur .
Habituellement contenu dans des fichiers protégés par mot de passe - conteneurs de clés, tels que .p12ou jkssur le systÚme de fichiers.
Mais le problÚme devient évident dÚs qu'il devient nécessaire de placer une application similaire dans :
MĂȘme ceux protĂ©gĂ©s par mot de passe ne peuvent pas ĂȘtre placĂ©s dans le rĂ©fĂ©rentiel avec le code source.
Il en va de mĂȘme pour les images Docker et tout autre artefact similaire disponible pour plusieurs personnes.
Heureusement, cela est facile Ă corriger dans les applications Java!
Considérons le processus proposé en termes de théorie de la sécurité:
- Le responsable de la sécurité (OB) exporte
sous forme de chaßne codéeBase64 - ..
( 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- .
!