كيفية تمكين التشفير في جهاز عرض JetBrains

جهاز العرض هو طريقة لتشغيل IntelliJ IDEA على خادم بعيد. لقد كتبت مؤخرًا مقالًا حول هذا ، لكنني التزمت الصمت بشأن شيء مهم لأي تشفير بجنون العظمة - تشفير البيانات على مقبس الويب.



يعد إنشاء المفاتيح وضبطها جزءًا من العمل الكئيب إلى حد ما. هنا سيكون عليك التعرف على ميزات Docker والتشفير في Java. لسوء الحظ ، لا يمكنك الابتعاد عن هذا ، لأنه جافا ، ولا يقع اللوم على الرجال في JetBrains على الإطلاق.



في المقال الأصلي ، تم تغطية هذا النص بمفسد ، ولكن بعد ذلك شعرت أنه من المستحيل قراءة مثل هذا النص من النص وولدت هذا النص. آسف مقدما. من خلال فتح هذه المقالة ، فإنك توافق على أنك لن تحب ما تراه.



توليد مفاتيح



أولاً ، نحتاج إلى إنشاء مجموعة من المفاتيح. للقيام بذلك ، تحتاج إلى تثبيت OpenJDK واستخدام أداة keytool.



إنشاء المفاتيح عبارة عن مجموعة من الخطوات. لقد كتبت نصًا لنفسي ، وأحثك على استخدامه.



mkdir ~/keystore
cd ~/keystore

curl https://raw.githubusercontent.com/projectile-ide/projectile-keymaker/master/projectile-keymaker --output ./keymaker

chmod 755 ./keymaker
./projectile-keymaker projector idea true IP 192.168.1.1 mypassword


ومع ذلك ، لا شيء يمنعك من القيام بذلك بنفسك. الشيء الرئيسي هو أن الإخراج هو ملفان مهمان: ca.crtو server.jks.



  • ca.crtهو المرجع المصدق الذي وقع على مفاتيح الخادم. ستحتاج إلى إجبار المتصفح على الوثوق به.
  • server.jks — IDEA.




- , . .



Certificate Authority (CA), .



keytool -genkeypair -v \
  -alias ca \
  -dname "CN=myCA, OU=Development, O=myCA, L=SPB, S=SPB, C=RU" \
  -keystore ca.jks \
  -keypass:env PW \
  -storepass:env PW \
  -keyalg RSA \
  -keysize 4096 \
  -ext KeyUsage:critical="keyCertSign" \
  -ext BasicConstraints:critical="ca:true" \
  -validity 9999




: -keypass:env PW. , ( bash history), .



export PW=mypassword , bash history. .



, :



export PW=`pwgen -Bs 10 1`
echo $PW > password


:



export PW=`cat password`


, ? , , . , — . , , PW.



...



CA , - JKS, . , crt:



keytool -export -v \
  -alias ca \
  -file ca.crt \
  -keypass:env PW \
  -storepass:env PW \
  -keystore ca.jks \
  -rfc


(, ):



keytool -genkeypair -v \
  -alias server \
  -dname "CN=myServer, OU=Development, O=myServer, L=SPB, S=SPB, C=RU" \
  -keystore server.jks \
  -keypass:env PW \
  -storepass:env PW \
  -keyalg RSA \
  -keysize 2048 \
  -validity 385


, . , :



keytool -certreq -v \
  -alias server \
  -keypass:env PW \
  -storepass:env PW \
  -keystore server.jks \
  -file server.csr


CA, :



keytool -gencert -v \
  -alias ca \
  -keypass:env PW \
  -storepass:env PW \
  -keystore ca.jks \
  -infile server.csr \
  -outfile server.crt \
  -ext KeyUsage:critical="digitalSignature,keyEncipherment" \
  -ext EKU="serverAuth" \
  -ext SAN="IP:192.168.1.1" \
  -rfc


, SAN : "DNS:website.com", . "IP:192.168.1.1", . IP, , , .



, , JKS CA ( ):



keytool -import -v \
  -alias ca \
  -file ca.crt \
  -keystore server.jks \
  -storetype JKS \
  -storepass:env PW << EOF
yes
EOF


JKS:



keytool -import -v \
  -alias server \
  -file server.crt \
  -keystore server.jks \
  -storetype JKS \
  -storepass:env PW


, :



keytool -list -v \
  -keystore server.jks \
  -storepass:env PW


, . .





/home/olegchir/keystore/ssl.properties :



STORE_TYPE=JKS
FILE_PATH=/tmp/server.jks
STORE_PASSWORD=mypassword
KEY_PASSWORD=mypassword


, , , .



(/home/olegchir) , - . , , . olegchir, .



/tmp/server.jks, /home/olegchir/keystore/server.jks? , , . .



Projector, . docker run, .



, run-container.sh :



docker run --rm -p 8080:8080 -p 8887:8887 -it "$containerName" bash -c "nginx && ./run.sh"


:



  • ORG_JETBRAINS_PROJECTOR_SERVER_SSL_PROPERTIES_PATH ;
  • ORG_JETBRAINS_PROJECTOR_SERVER_HANDSHAKE_TOKEN , URL, ;
  • ( ) /tmp.


docker run --rm \
    -v /home/olegchir/keystore/ssl.properties:/tmp/ssl.properties \
    -v /home/olegchir/keystore/server.jks:/tmp/server.jks \
    --env ORG_JETBRAINS_PROJECTOR_SERVER_SSL_PROPERTIES_PATH=/tmp/ssl.properties \
    --env ORG_JETBRAINS_PROJECTOR_SERVER_HANDSHAKE_TOKEN=mypassword \
    -p 8080:8080 -p 8887:8887 -it "$containerName" bash -c "nginx && ./run.sh"


!



./run-container.sh


- . :



[INFO] :: ProjectorServer :: WebSocket SSL is enabled: /tmp/ssl.properties
[INFO] :: ProjectorServer :: Server started




ca.crt , . .



-. , .



Firefox:



  1. Privacy & Security
  2. — View Certificates
  3. Authorities
  4. Import...
  5. , .
  6. .




Chrome Windows:



  1. Privacy and security
  2. Securty
  3. Manage certificates
  4. Trusted Root Certification Authorities
  5. Import...
  6. , , Trusted Root Certification Authorities.
  7. Chrome. Windows . Chrome, , Chrome. Delete.
  8. Chrome .




Chrome Linux:



  1. Privacy and security
  2. Securty
  3. Manage certificates
  4. Authorities
  5. Import...
  6. ca.crt,
  7. , .
  8. .


Chrome Fully Kiosk Browser Android:



Android . Huawei MediaPad M5 Solid Explorer .



:



  1. Settings
  2. Security & privacy
  3. More Settings
  4. Encription and credentials
  5. Install from storage
  6. ca.crt
  7. .


, Android- , "Install from storage" , . .





: https://localhost:8080/projector/?wss&token=mypassword



: https://hostname:8080/projector/?wss&host=hostname&port=8887&token=mypassword





إذا فشل كل شيء آخر ، فحاول فتح عنوان URL https://hostname:8887وشاهد ما يكتبه المتصفح. ربما سيكون هناك زر مثل "ثق بهذا الخادم إلى الأبد" أو شيء من هذا القبيل. ربما ستكون هناك رسالة خطأ ذاتية التفسير.



الاستنتاجات



يعد إنشاء اتصال آمن أمرًا محبطًا وطويلًا. تحتاج إلى كتابة الكثير من الأوامر في وحدة التحكم التي لا يمكن حفظها عن ظهر قلب ، والبحث عن ملفات dockerfiles ، ونقل الملفات إلى جهاز محمول. إذا أخطأت في مكان ما في حرف واحد على الأقل ، فلا شيء يعمل.



من ناحية أخرى ، فعلت ذلك مرة واحدة - وأعيش في سلام.




All Articles