افترض أن تطبيقنا Java
مستضاف على منصة Heroku ويحتاج إلى الاتصال بخادم HTTP الذي يتطلب توفير شهادة عميل.
في هذه المقالة ، سوف نتعامل مع مشكلات تخزين ملفات تخزين العملاء بشكل آمن
، باستخدام
.
- يُعد الاحتفاظ بكلمات المرور والبيانات الحساسة الأخرى
ممارسة شائعة للتطبيقات المستضافة على
.
عادة ما تكون
موجودة في ملفات محمية بكلمة مرور - حاويات رئيسية ، مثل .p12
أو jks
على نظام الملفات.
لكن المشكلة تصبح واضحة بمجرد أن يصبح من الضروري وضع تطبيق مماثل في
:
حتى تلك المحمية بكلمة مرور
لا يمكن وضعها في المستودع مع شفرة المصدر.
وينطبق الشيء نفسه على صور Docker وأي قطع أثرية أخرى مماثلة متاحة لعدة أشخاص.
لحسن الحظ ، من السهل إصلاح هذا في التطبيقات على Java
!
النظر في العملية المقترحة من حيث نظرية السلامة:
- يصدر ضابط الأمن (OB)
كسلسلة مشفرةBase64
- ..
( 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
- .
!