So aktivieren Sie die Verschlüsselung in JetBrains Projector

Mit Projector können Sie IntelliJ IDEA auf einem Remote-Server ausführen. Ich habe kürzlich einen Artikel darüber geschrieben , aber ich habe über eine wichtige Sache für jeden Paranoiden geschwiegen - das Verschlüsseln von Daten auf einem Web-Socket.



Das Generieren und Setzen von Schlüsseln ist eine ziemlich trostlose Arbeit. Hier müssen Sie sich mit den Funktionen von Docker und Kryptografie in Java vertraut machen. Leider kommt man nicht davon weg, weil es Java ist und die Leute bei JetBrains überhaupt nicht schuld sind.



Im Originalartikel war dieser Text mit einem Spoiler bedeckt, aber dann hatte ich das Gefühl, dass es unmöglich war, eine solche Textwand zu lesen, und brachte diesen Text hervor. Entschuldigung im Voraus. Durch das Öffnen dieses Artikels stimmen Sie zu, dass Ihnen das, was Sie sehen, nicht gefällt.



Schlüssel generieren



Zuerst müssen wir einen Schlüsselsatz generieren. Dazu müssen Sie OpenJDK installieren und das Keytool-Tool verwenden.



Das Generieren von Schlüsseln besteht aus mehreren Schritten. Ich habe ein Skript für mich selbst geschrieben und fordere Sie auf, es zu verwenden.



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 — Certificate Authority, . .
  • 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





, https://hostname:8887 , . , " " - . , .





Das Einrichten einer sicheren Verbindung ist langwierig und frustrierend. Sie müssen viele Befehle in die Konsole eingeben, die nicht auswendig gelernt werden können, Docker-Dateien durchsuchen und Dateien auf ein mobiles Gerät übertragen. Wenn Sie irgendwo in mindestens einem Buchstaben einen Fehler gemacht haben, funktioniert nichts.



Andererseits habe ich es einmal getan - und in Frieden gelebt.




All Articles