投影仪是在远程服务器上运行IntelliJ IDEA的一种方法。我最近写了一篇有关此内容的文章,但对于任何偏执狂,我都保持沉默-对Web套接字上的数据进行加密。
生成和设置密钥是一件很乏味的工作。在这里,您必须熟悉Docker和Java加密功能。不幸的是,您无法摆脱它,因为它是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的特定服务器的证书。
手动日出
真正的偏执狂从不相信互联网上任何其他人的脚本,而是自己检查所有内容。让我们看一下基本步骤。
首先,我们需要生成自己的证书颁发机构(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历史记录中丢失),但是将从环境变量中获取密码。
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:
- Privacy & Security
- — View Certificates
- Authorities
- Import...
- , .
- .
Chrome Windows:
- Privacy and security
- Securty
- Manage certificates
- Trusted Root Certification Authorities
- Import...
- , , Trusted Root Certification Authorities.
- Chrome. Windows . Chrome, , Chrome. Delete.
- Chrome .
Chrome Linux:
- Privacy and security
- Securty
- Manage certificates
- Authorities
- Import...
-
ca.crt
, - , .
- .
Chrome Fully Kiosk Browser Android:
Android . Huawei MediaPad M5 Solid Explorer .
:
- Settings
- Security & privacy
- More Settings
- Encription and credentials
- Install from storage
-
ca.crt
- .
, 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
, . , " " - . , .
建立安全连接很长且令人沮丧。您需要在控制台中键入很多命令,这些命令无法记住,无法通过dockerfile进行漫游,将文件传输至移动设备。如果您在至少一个字母的某个地方犯了一个错误,那么什么都不起作用。
另一方面,我只做过一次-和平相处。