إدارة شهادات العميل في Heroku

افترض أن تطبيقنا Javaمستضاف على منصة Heroku ويحتاج إلى الاتصال بخادم HTTP الذي يتطلب توفير شهادة عميل.


في هذه المقالة ، سوف نتعامل مع مشكلات تخزين ملفات تخزين العملاء بشكل آمن ، باستخدام .


  • يُعد الاحتفاظ بكلمات المرور والبيانات الحساسة الأخرى ممارسة شائعة للتطبيقات المستضافة على .

عادة ما تكون موجودة في ملفات محمية بكلمة مرور - حاويات رئيسية ، مثل .p12أو jksعلى نظام الملفات.


لكن المشكلة تصبح واضحة بمجرد أن يصبح من الضروري وضع تطبيق مماثل في :


  • حتى تلك المحمية بكلمة مرور لا يمكن وضعها في المستودع مع شفرة المصدر.


  • وينطبق الشيء نفسه على صور Docker وأي قطع أثرية أخرى مماثلة متاحة لعدة أشخاص.


  • لحسن الحظ ، من السهل إصلاح هذا في التطبيقات على Java!



النظر في العملية المقترحة من حيث نظرية السلامة:


  1. يصدر ضابط الأمن (OB) كسلسلة مشفرةBase64
  2. .. ( Heroku Dashboard)
  3. .. Base64
  4. ,

  • , , , .

:


  • : Java
  • : Heroku
  • : Gradle
  • : PKCS12

.p12


, , :



Heroku


  • Heroku
  • Settings
  • "Reveal the config vars"
  • :
    • keyStoreFileName — , "private_key.p12"
    • keyStoreBase64Base64, " .p12"
    • keyStorePassword — , .p12
    • keyStoreTypepkcs12
    • trustStoreTypejks

.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 .


, shellrunApp.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
  • .

!


All Articles