Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°:
- python3.9.10 Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΌ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ΠΌ
pycades
(CPStore
,CPSigner
,CPSignedData
) - ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ ΠΡΠΈΠΏΡΠΎΠΡΠΎ:
certmgr
,cpverify
,cryptcp
,csptest
,csptestf
,der2xer
,inittst
,wipefile
,cpconfig
- Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠΊΡΠΈΠΏΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ
- HTTP REST-ΡΠ΅ΡΠ²Π΅Ρ
ΠΡΡΡ 3 Π²Π°ΡΠΈΠ°Π½ΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°:
- ΡΠ΅ΡΠ΅Π· ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ (ΠΈ ssh-ΠΊΠ»ΠΈΠ΅Π½Ρ Π΄Π»Ρ ΡΠ΄Π°Π»Π΅Π½Π½ΡΡ ΠΌΠ°ΡΠΈΠ½)
- ΡΠ΅ΡΠ΅Π· HTTP REST-ΡΠ΅ΡΠ²Π΅Ρ
- Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠ²ΠΎΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ Π²Π½ΡΡΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°
βββ assets - ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Ρ Π΄Π»Ρ README.md
βββ devel - devel ΡΠΊΡΠΈΠΏΡΡ
βββ certificates - ΡΠ΅ΡΡΠΎΠ²ΡΠ΅ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΡ
βββ dist - ΠΏΠ°ΠΊΠ΅ΡΡ ΠΡΠΈΠΏΡΠΎΠΡΠΎ (Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΊΠ°ΡΠ°ΡΡ Ρ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΡΠ°)
βββ Dockerfile - ΡΠ°ΠΉΠ» ΡΠ±ΠΎΡΠΊΠΈ ΠΎΠ±ΡΠ°Π·Π°
βββ README.md - ΡΡΠΎΡ ΡΠ°ΠΉΠ»
βββ scripts - Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠΊΡΠΈΠΏΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ
βββ www - HTTP REST-ΡΠ΅ΡΠ²Π΅Ρ
Π‘ΠΊΠ°ΡΠ°ΡΡ Ρ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΡΠ° Π² dist/
(Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π±ΡΡΡ Π·Π°Π»ΠΎΠ³ΠΈΠ½Π΅Π½ΡΠΌ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅):
- ΠΡΠΈΠΏΡΠΎΠΡΠΎ CSP 5.0 Π΄Π»Ρ Linux (x64, deb) =>
dist/linux-amd64_deb.tgz
- ΠΡΠΈΠΏΡΠΎΠΡΠΎ ΠΠ¦Π SDK Π²Π΅ΡΡΠΈΡ 2.0 Π΄Π»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ =>
dist/cades-linux-amd64.tar.gz
- Linux Π²Π΅ΡΡΠΈΡ - ΠΡΡ
ΠΈΠ² Ρ ΠΈΡΡ
ΠΎΠ΄Π½ΠΈΠΊΠ°ΠΌΠΈ =>
dist/pycades.zip
ΠΠ°ΠΏΡΡΡΠΈΡΡ:
docker build --tag cryptopro_5 .
Π Dockerfile
ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡ Π½Π°Π·Π²Π°Π½ΠΈΡ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ², Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ lsb-cprocsp-devel_5.0.12000-6_all.deb
, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ Π½ΠΎΠ²ΠΎΠΉ Π²Π΅ΡΡΠΈΠ΅ΠΉ. Π‘Π»Π΅Π΄ΡΠ΅Ρ ΠΏΠΎΠΏΡΠ°Π²ΠΈΡΡ Π½Π°Π·Π²Π°Π½ΠΈΡ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² Π² Dockerfile
.
ΠΠ°ΠΏΡΡΡΠΈΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ΠΏΠΎΠ΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ cryptopro
, ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ
:
docker run -it --rm -p 8095:80 --name cryptopro cryptopro_5
ΠΠ»Ρ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΎΠ² ΠΈ Π»ΠΈΡΠ΅Π½Π·ΠΈΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΌΠΎΠ½ΡΠΈΡΡΠ΅ΠΌ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ
docker run -it -p 8095:80 -v ./cryptopro-data:/var/opt/cprocsp/ -v ./cryptopro-etc:/etc/opt/cprocsp/ --name cryptopro cryptopro_5
Π Π°Π±ΠΎΡΠ° Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠΌ ΡΠ΅ΡΠ΅Π· ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠ΅ΡΠΈΠΉΠ½ΠΎΠ³ΠΎ Π½ΠΎΠΌΠ΅ΡΠ°:
docker exec -i cryptopro cpconfig -license -set <ΡΠ΅ΡΠΈΠΉΠ½ΡΠΉ_Π½ΠΎΠΌΠ΅Ρ>
ΠΡΠΎΡΠΌΠΎΡΡ:
docker exec -i cryptopro cpconfig -license -view
ΠΠ»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΊΠΎΡΠ½Π΅Π²ΡΡ
ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΎΠ² Π½ΡΠΆΠ½ΠΎ Π½Π° stdin
ΡΠΊΡΠΈΠΏΡΠ° /scripts/root
ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΠ°ΠΉΠ» Ρ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠ°ΠΌΠΈ. ΠΡΠ»ΠΈ Π² ΡΠ°ΠΉΠ»Π΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΎΠ², Π²ΡΠ΅ ΠΎΠ½ΠΈ Π±ΡΠ΄ΡΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Ρ.
Π‘ΠΊΠ°ΡΠ°Π΅ΠΌ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ Π½Π° Π΄ΠΈΡΠΊ Ρ ΠΏΠΎΠΌΠΎΡΡΡ curl
ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π΄ΠΈΠΌ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΉ ΡΠ°ΠΉΠ» Π½Π° stdin
Ρ Π·Π°ΠΏΡΡΠΊΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π΅Π³ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ:
curl -sS http://cpca.cryptopro.ru/cacer.p7b > certificates/cacer.p7b
cat certificates/cacer.p7b | docker exec -i cryptopro /scripts/root
# ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΡ Π£Π¦
curl -sS http://cpca.cryptopro.ru/cacer.p7b | docker exec -i cryptopro /scripts/root
# ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΡ ΡΠ΅ΡΡΠΎΠ²ΠΎΠ³ΠΎ Π£Π¦
curl -sS http://testca2012.cryptopro.ru/cert/rootca.cer | docker exec -i cryptopro /scripts/root
curl -sS http://testca2012.cryptopro.ru/cert/subca.cer | docker exec -i cryptopro /scripts/root
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΏΡΠΈΡΠΈΠ½Π΅ ΠΈΠ½ΠΎΠ³Π΄Π° "Π·Π°Π΅Π΄Π°Π΅Ρ", Π½ΠΎ ΠΏΡΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠΌ Π·Π°ΠΏΡΡΠΊΠ΅ - ΡΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ.
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΎΠ² ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΈ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Π½ΠΈΡ
ΠΠ΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΡΡΠΎΡΠΌΠΈΡΠΎΠ²Π°ΡΡ zip-Π°ΡΡ
ΠΈΠ² bundle.zip
ΠΈ ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ Π΅Π³ΠΎ Π½Π° stdin
ΡΠΊΡΠΈΠΏΡΠ° /scripts/my
. ΠΡΠΈΠΌΠ΅Ρ ΡΠ°ΠΊΠΎΠ³ΠΎ zip-ΡΠ°ΠΉΠ»Π°:
βββ certificate.cer - ΡΠ°ΠΉΠ» ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠ° (Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ)
βββ le-09650.000 - ΠΊΠ°ΡΠ°Π»ΠΎΠ³ Ρ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ Π·Π°ΠΊΡΡΡΠΎΠ³ΠΎ ΠΊΠ»ΡΡΠ° (Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ)
βββ header.key
βββ masks2.key
βββ masks.key
βββ name.key
βββ primary2.key
βββ primary.key
ΠΠ°ΠΊ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ ΠΡΠΈΠΏΡΠΎΠΡΠΎ.
ΠΠ΅ΡΠ²ΡΠΉ Π½Π°ΠΉΠ΄Π΅Π½Π½ΡΠΉ ΡΠ°ΠΉΠ» Π² ΠΊΠΎΡΠ½Π΅ Π°ΡΡ ΠΈΠ²Π° Π±ΡΠ΄Π΅Ρ Π²ΠΎΡΠΏΡΠΈΠ½ΡΡ ΠΊΠ°ΠΊ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ, Π° ΠΏΠ΅ΡΠ²ΡΠΉ Π½Π°ΠΉΠ΄Π΅Π½Π½ΡΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ - ΠΊΠ°ΠΊ ΡΠ²ΡΠ·ΠΊΠ° ΡΠ°ΠΉΠ»ΠΎΠ² Π·Π°ΠΊΡΡΡΠΎΠ³ΠΎ ΠΊΠ»ΡΡΠ°. ΠΠ°ΡΠΎΠ»Ρ ΠΎΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°, Π΅ΡΠ»ΠΈ Π΅ΡΡΡ, ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΠΏΠ΅ΡΠ²ΡΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ.
Π ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ certificates/
ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΈ ΡΠ΅ΡΡΠΎΠ²ΠΎΠ³ΠΎ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠ° ΠΈ Π·Π°ΠΊΡΡΡΠΎΠ³ΠΎ ΠΊΠ»ΡΡΠ°, Ρ PIN ΠΊΠΎΠ΄ΠΎΠΌ ΠΈ Π±Π΅Π·:
βββ bundle-cert-only.zip - ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ
βββ bundle-cosign.zip - ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ + Π·Π°ΠΊΡΡΡΡΠΉ ΠΊΠ»ΡΡ ΠΠΠ ΠΏΠΈΠ½-ΠΊΠΎΠ΄Π° (Π΄Π»Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Π²ΡΠΎΡΠΎΠΉ ΠΏΠΎΠ΄ΠΏΠΈΡΠΈ)
βββ bundle-cyrillic.zip - ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ + Π·Π°ΠΊΡΡΡΡΠΉ ΠΊΠ»ΡΡ, Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° "ΡΠ΅ΡΡΠΎΠ²ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°" (ΠΊΠΈΡΠΈΠ»Π»ΠΈΡΠ°)
βββ bundle-no-pin.zip - ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ + Π·Π°ΠΊΡΡΡΡΠΉ ΠΊΠ»ΡΡ ΠΠΠ ΠΏΠΈΠ½-ΠΊΠΎΠ΄Π°
βββ bundle-pin.zip - ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ + Π·Π°ΠΊΡΡΡΡΠΉ ΠΊΠ»ΡΡ Ρ ΠΏΠΈΠ½-ΠΊΠΎΠ΄ΠΎΠΌ 12345678
βββ bundle-private-key-only.zip - ΡΠΎΠ»ΡΠΊΠΎ Π·Π°ΠΊΡΡΡΡΠΉ ΠΊΠ»ΡΡ
ΠΡΠΈΠΌΠ΅ΡΡ:
# ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ + Π·Π°ΠΊΡΡΡΡΠΉ ΠΊΠ»ΡΡ Ρ ΠΏΠΈΠ½-ΠΊΠΎΠ΄ΠΎΠΌ
cat certificates/bundle-pin.zip | docker exec -i cryptopro /scripts/my 12345678
# ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ + Π·Π°ΠΊΡΡΡΡΠΉ ΠΊΠ»ΡΡ ΠΠΠ ΠΏΠΈΠ½-ΠΊΠΎΠ΄Π°
cat certificates/bundle-no-pin.zip | docker exec -i cryptopro /scripts/my
# ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ
cat certificates/bundle-cert-only.zip | docker exec -i cryptopro /scripts/my
# ΡΠΎΠ»ΡΠΊΠΎ Π·Π°ΠΊΡΡΡΡΠΉ ΠΊΠ»ΡΡ
cat certificates/bundle-private-key-only.zip | docker exec -i cryptopro /scripts/my
# ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ + Π·Π°ΠΊΡΡΡΡΠΉ ΠΊΠ»ΡΡ, Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° "ΡΠ΅ΡΡΠΎΠ²ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°" (ΠΊΠΈΡΠΈΠ»Π»ΠΈΡΠ°)
cat certificates/bundle-cyrillic.zip | docker exec -i cryptopro /scripts/my
Π‘Π΅ΡΡΠΈΡΠΈΠΊΠ°ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ:
docker exec -i cryptopro certmgr -list
ΠΠΎΡΠ½Π΅Π²ΡΠ΅ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΡ:
docker exec -i cryptopro certmgr -list -store root
ΠΠ»Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ ΡΡΠΎΡ ΡΠ΅ΡΡΠΎΠ²ΡΠΉ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ:
# ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ + Π·Π°ΠΊΡΡΡΡΠΉ ΠΊΠ»ΡΡ Ρ ΠΏΠΈΠ½-ΠΊΠΎΠ΄ΠΎΠΌ
cat certificates/bundle-pin.zip | docker exec -i cryptopro /scripts/my 12345678
ΠΠ³ΠΎ SHA1 Hash ΡΠ°Π²Π΅Π½ dd45247ab9db600dca42cc36c1141262fa60e3fe
(ΡΠ·Π½Π°ΡΡ: certmgr -list
), ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΊ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½ΡΠΆΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠ°.
Π’Π΅ΠΏΠ΅ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π΄ΠΈΠΌ Π½Π° stdin
ΡΠ°ΠΉΠ», Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ - ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ, ΠΈ Π½Π° stdout
ΠΏΠΎΠ»ΡΡΠΈΠΌ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Π½Π½ΡΠΉ ΡΠ°ΠΉΠ»:
cat README.md | docker exec -i cryptopro sh -c 'tmp=`mktemp`; cat - > "$tmp"; cryptcp -sign -thumbprint dd45247ab9db600dca42cc36c1141262fa60e3fe -nochain -pin 12345678 "$tmp" "$tmp.sig" > /dev/null 2>&1; cat "$tmp.sig"; rm -f "$tmp" "$tmp.sig"'
ΠΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π½Π΅ΡΠ΄ΠΎΠ±Π½ΠΎ. Π‘ΠΊΡΠΈΠΏΡ scripts/sign
Π΄Π΅Π»Π°Π΅Ρ ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, ΡΠ΅ΠΏΠ΅ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Π½ΠΈΡ Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ°ΠΊ:
cat README.md | docker exec -i cryptopro /scripts/sign dd45247ab9db600dca42cc36c1141262fa60e3fe 12345678
ΠΠ± ΠΎΡΠΈΠ±ΠΊΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ·Π½Π°ΡΡ ΡΠ΅ΡΠ΅Π· ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ $?
.
ΠΠΎΠ΄ΠΏΠΈΡΠ΅ΠΌ ΡΠ°ΠΉΠ» ΠΈΠ· ΠΏΡΠΈΠΌΠ΅ΡΠ° Π²ΡΡΠ΅ ΠΈ ΡΠΎΡ ΡΠ°Π½ΠΈΠΌ Π΅Π³ΠΎ Π½Π° Π΄ΠΈΡΠΊ:
cat README.md | docker exec -i cryptopro /scripts/sign dd45247ab9db600dca42cc36c1141262fa60e3fe 12345678 > certificates/README.md.sig
Π’ΠΎΠ³Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Π½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ°ΠΊ:
cat certificates/README.md.sig | docker exec -i cryptopro sh -c 'tmp=`mktemp`; cat - > "$tmp"; cryptcp -verify -norev -f "$tmp" "$tmp"; rm -f "$tmp"'
Π’ΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, Π½ΠΎ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠΊΡΠΈΠΏΡΠ°:
cat certificates/README.md.sig | docker exec -i cryptopro scripts/verify
ΠΠΎΠ·ΡΠΌΠ΅ΠΌ ΡΠ°ΠΉΠ» ΠΈΠ· ΠΏΡΠΈΠΌΠ΅ΡΠ° Π²ΡΡΠ΅:
cat certificates/README.md.sig | docker exec -i cryptopro sh -c 'tmp=`mktemp`; cat - > "$tmp"; cryptcp -verify -nochain "$tmp" "$tmp.origin" > /dev/null 2>&1; cat "$tmp.origin"; rm -f "$tmp" "$tmp.origin"'
Π’ΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, Π½ΠΎ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠΊΡΠΈΠΏΡΠ°:
cat certificates/README.md.sig | docker exec -i cryptopro scripts/unsign
Π ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ
Π²ΡΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π²ΡΠ³Π»ΡΠ΄ΡΡ ΡΠ°ΠΊ: cat ... | docker ...
ΠΈΠ»ΠΈ curl ... | docker ...
, ΡΠΎ Π΅ΡΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Π·Π°ΠΏΡΡΠ΅Π½ Π½Π° Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅. ΠΡΠ»ΠΈ ΠΆΠ΅ Π΄ΠΎΠΊΠ΅Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Π·Π°ΠΏΡΡΠ΅Π½ Π½Π° ΡΠ΄Π°Π»Π΅Π½Π½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅, ΡΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π½ΡΠΆΠ½ΠΎ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡ ΡΠ΅ΡΠ΅Π· ssh ΠΊΠ»ΠΈΠ΅Π½Ρ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Π½ΠΈΡ:
cat README.md | ssh -q user@host 'docker exec -i cryptopro /scripts/sign dd45247ab9db600dca42cc36c1141262fa60e3fe 12345678'
ΠΠΏΡΠΈΡ -q
ΠΎΡΠΊΠ»ΡΡΠ°Π΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ ΠΈΠ· ΡΠ°ΠΉΠ»Π° /etc/banner
(Ρ
ΠΎΡΡ ΠΎΠ½ΠΎ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ ΠΏΠΈΡΠ΅ΡΡΡ Π² stderr
). Π /etc/motd
ΠΏΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΏΠΎ ssh Π½Π΅ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡ.
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ° ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ ΠΏΠΎ ssh Π½Π° ΡΠ²ΠΎΡ ΠΆΠ΅ ΠΌΠ°ΡΠΈΠ½Ρ ΡΠ°ΠΊ:
# ΠΊΠΎΠΏΠΈΡΡΠ΅ΠΌ ΠΏΡΠ±Π»ΠΈΡΠ½ΡΠΉ ΠΊΠ»ΡΡ Π½Π° "ΡΠ΄Π°Π»Π΅Π½Π½ΡΡ ΠΌΠ°ΡΠΈΠ½Ρ" (Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ - localhost)
ssh-copy-id $(whoami)@localhost
# ΠΏΡΠΎΠ±ΡΠ΅ΠΌ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°ΡΡ
cat README.md | ssh -q $(whoami)@localhost 'docker exec -i cryptopro /scripts/sign dd45247ab9db600dca42cc36c1141262fa60e3fe 12345678'
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΎΠ² ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅ΡΠ΅Π· ΠΊΠΎΠΌΠ°Π½Π΄ΡΡ ΡΡΡΠΎΠΊΡ. ΠΡΠ΅ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π΄ΠΎΡΡΡΠΏΠ½Ρ ΠΏΠΎ HTTP.
/certificates
- Π²ΡΠ΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠ΅ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ (GET
)/certificate/root
- ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΊΠΎΡΠ½Π΅Π²ΡΡ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΎΠ² (POST
)/certificate/private_key
- ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΏΡΠΈΠ²Π°ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ»ΡΡΠ° (POST
)/license?serial_number=
- ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠ΅ΡΠΈΠΉΠ½ΠΎΠΉ Π»ΠΈΡΠ΅Π½Π·ΠΈΠΈ (POST
)/signer
- ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΎΠ² (POST
)/verify
- ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Π½Π½ΠΎΠ³ΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ° (POST
)/unsigner
- ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Π±Π΅Π· ΠΏΠΎΠ΄ΠΏΠΈΡΠ΅ΠΉ (POST
)
ΠΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΡΡ Π΄Π°Π½Π½ΡΠ΅ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ JSON
.
Π£ΡΠΏΠ΅ΡΠ½ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΠΊΠΎΠ΄ 200
ΠΈ "status": "ok"
.
ΠΠ΅ΠΉΡΡΠ²ΠΈΡ Ρ ΠΎΡΠΈΠ±ΠΊΠ°ΠΌΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ 4xx
ΠΈ 5xx
ΠΊΠΎΠ΄Ρ ΠΈ "status": "fail"
, Π² ΠΏΠΎΠ»ΡΡ
errMsg
ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ, Π² errCode
- Π΅Π΅ ΠΊΠΎΠ΄.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ Ρ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΌ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ
curl -sS -X POST --data-binary "bindata" http://localhost:8095/healthchecks
Π²ΡΠ²Π΅Π΄Π΅Ρ ΡΠ°ΠΊΡΡ ΠΎΡΠΈΠ±ΠΊΡ:
{"status":"fail","errMsg":"Method must be one of: GET","errCode":405}
curl -X 'GET' \
'http://localhost:8085/certificate' \
-H 'accept: application/json'
ΠΡΠ»ΠΈ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΎΠ² Π½Π΅Ρ:
{"status":"fail","errMsg":"No certificates in store 'My'","errCode":404}
ΠΡΠ»ΠΈ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΡ Π΅ΡΡΡ:
{
"data_certificates": {
"certificate_1": {
"privateKey": {
"providerName": "Crypto-Pro GOST R 34.10-2012 KC1 CSP",
"uniqueContainerName": "HDIMAGE\\\\eb5f6857.000\\D160",
"containerName": "eb5f6857-a08a-4510-8a96-df2f75b6d65a"
},
"algorithm": {
"name": "ΠΠΠ‘Π’ Π 34.10-2012 256 Π±ΠΈΡ",
"val": "1.2.643.7.1.1.1.1"
},
"valid": {
"from": "23.08.2021 12:07:25",
"to": "23.08.2022 12:17:25"
},
"issuer": {
"CN": "Test",
"O": "Test",
"OU": "Test",
"STREET": "Test",
"L": "ΠΠΎΡΠΊΠ²Π°",
"C": "RU",
"raw": "CN=Test, O=Test, OU=Test, STREET=Test, L=ΠΠΎΡΠΊΠ²Π°, S=77 ΠΠΎΡΠΊΠ²Π°, C=RU, INN=Test, OGRN=Test"
},
"subject": {
"E": "Test@Test.ru",
"C": "RU",
"L": "Π³ ΠΠΎΡΠΊΠ²Π°",
"O": "Test",
"CN": "Test",
"STREET": "Test",
"G": "Test",
"SN": "Test ",
"raw": "SNILS=Test, OGRN=Test, INN=Test, E=Test@Test.ru, C=RU, S=77 Π³. ΠΠΎΡΠΊΠ²Π°, L=Π³ ΠΠΎΡΠΊΠ²Π°, O=Test, CN=Test, STREET=Test, T=Test, G=Test, SN=Test"
},
"thumbprint": "982AA9E713A2F99B10DAA07DCDC94A4BC32A1027",
"serialNumber": "120032C3567443029CC358FCDF00000032C356",
"hasPrivateKey": true
}
}
}
ΠΠ»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΊΠΎΠ½Π΅Π²ΡΡ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΎΠ² Π½ΡΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΠ°ΠΉΠ» (Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ΠΌ cer ΠΈΠ»ΠΈ p7b) Π² ΡΠ΅ΡΠ²ΠΈΡ.
curl -X 'POST' \
'http://localhost:8085/certificate/root' \
-H 'accept: application/json' \
-H 'Content-Type: multipart/form-data' \
-F 'file=@filename.p7b;type=application/x-pkcs7-certificates'
ΠΠ»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΏΡΠΈΠ²Π°ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ»ΡΡΠ° Π½ΡΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π°ΡΡ
ΠΈΠ² Π² ΡΠ΅ΡΠ²ΠΈΡ.
Π ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ certificates/
ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΈ ΡΠ΅ΡΡΠΎΠ²ΠΎΠ³ΠΎ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠ° ΠΈ Π·Π°ΠΊΡΡΡΠΎΠ³ΠΎ ΠΊΠ»ΡΡΠ°, Ρ PIN ΠΊΠΎΠ΄ΠΎΠΌ ΠΈ Π±Π΅Π·:
βββ bundle-cert-only.zip - ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ
βββ bundle-cosign.zip - ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ + Π·Π°ΠΊΡΡΡΡΠΉ ΠΊΠ»ΡΡ ΠΠΠ ΠΏΠΈΠ½-ΠΊΠΎΠ΄Π° (Π΄Π»Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Π²ΡΠΎΡΠΎΠΉ ΠΏΠΎΠ΄ΠΏΠΈΡΠΈ)
βββ bundle-cyrillic.zip - ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ + Π·Π°ΠΊΡΡΡΡΠΉ ΠΊΠ»ΡΡ, Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° "ΡΠ΅ΡΡΠΎΠ²ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°" (ΠΊΠΈΡΠΈΠ»Π»ΠΈΡΠ°)
βββ bundle-no-pin.zip - ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ + Π·Π°ΠΊΡΡΡΡΠΉ ΠΊΠ»ΡΡ ΠΠΠ ΠΏΠΈΠ½-ΠΊΠΎΠ΄Π°
βββ bundle-pin.zip - ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ + Π·Π°ΠΊΡΡΡΡΠΉ ΠΊΠ»ΡΡ Ρ ΠΏΠΈΠ½-ΠΊΠΎΠ΄ΠΎΠΌ 12345678
βββ bundle-private-key-only.zip - ΡΠΎΠ»ΡΠΊΠΎ Π·Π°ΠΊΡΡΡΡΠΉ ΠΊΠ»ΡΡ
Π‘ ΠΏΠΈΠ½-ΠΊΠΎΠ΄ΠΎΠΌ:
curl -X 'POST' \
'http://localhost:8085/certificate/private_key?pin=1234' \
-H 'accept: application/json' \
-H 'Content-Type: multipart/form-data' \
-F 'file=@bundle-pin.zip;type=application/zip'
ΠΠ΅Π· ΠΏΠΈΠ½-ΠΊΠΎΠ΄ΠΎΠΌ:
curl -X 'POST' \
'http://localhost:8085/certificate/private_key' \
-H 'accept: application/json' \
-H 'Content-Type: multipart/form-data' \
-F 'file=@bundle-no-pin.zip;type=application/zip'
ΠΠ»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΡΠ΅ΡΠΈΠΉΠ½ΠΎΠ³ΠΎ Π½ΠΎΠΌΠ΅ΡΠ° Π»ΠΈΡΠ΅Π½Π·ΠΈΠΈ Π½ΡΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π½ΠΎΠΌΠ΅Ρ.
curl -X 'POST' \
'http://localhost:8085/license?serial_number=12345-12345-12345-12345-12345' \
-H 'accept: application/json' \
-d ''
ΠΠ»Ρ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Π½ΠΈΡ Π½ΡΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΠ°ΠΉΠ» Π² ΡΠ΅ΡΠ²ΠΈΡ.
Π‘ ΠΏΠΈΠ½-ΠΊΠΎΠ΄ΠΎΠΌ:
curl -X 'POST' \
'http://localhost:8085/signer?pin=123' \
-H 'accept: application/json' \
-H 'Content-Type: multipart/form-data' \
-F 'file=@filename.pdf;type=application/pdf'
ΠΠ΅Π· ΠΏΠΈΠ½-ΠΊΠΎΠ΄Π°:
curl -X 'POST' \
'http://localhost:8085/signer' \
-H 'accept: application/json' \
-H 'Content-Type: multipart/form-data' \
-F 'file=@filename.pdf;type=application/pdf'
ΠΠ΅ΡΠ½Π΅ΡΡΡ JSON
- Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ, Π² signedContent
Π±ΡΠ΄Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡΡ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Π½Π½ΡΠΉ ΡΠ°ΠΉΠ» ΠΈ Π² filename
Π½ΠΎΠ²ΠΎΠ΅ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π°.
ΠΠ»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΏΠΎΠ΄ΠΏΠΈΡΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΠΌ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Π½Π½ΡΠΉ ΠΈ Π½Π΅ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Π½Π½ΡΠΉ ΡΠ°ΠΉΠ»Ρ.
curl -X 'POST' \
'http://localhost:8085/verify' \
-H 'accept: application/json' \
-H 'Content-Type: multipart/form-data' \
-F 'original_file=@filename1.pdf;type=application/pdf' \
-F 'signed_file=@filename2.pdf;type=application/pdf'
ΠΡΠ»ΠΈ ΡΠ°ΠΉΠ» ΠΏΡΠΎΡΠ΅Π» ΠΏΡΠΎΠ²Π΅ΡΠΊΡ, Π²Π΅ΡΠ½Π΅ΡΡΡ ΡΠΏΠΈΡΠΎΠΊ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Π½ΡΠΎΠ² signers
.
ΠΡΡ
ΠΎΠ΄Π½ΡΠΉ ΡΠ°ΠΉΠ» Π²Π΅ΡΠ½Π΅ΡΡΡ Π² ΠΏΠΎΠ»Π΅ content
.
curl -X 'POST' \
'http://localhost:8085/unsigner' \
-H 'accept: application/json' \
-H 'Content-Type: multipart/form-data' \
-F 'file=@filename.sig;type=application/sig'
- Π‘ΡΡΠ°Π½ΠΈΡΠ° ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ Π΄Π»Ρ Python
- Π’Π΅ΡΡΠΎΠ²ΡΠΉ Π£Π¦, Π΅Π³ΠΎ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΡ: ΠΊΠΎΡΠ½Π΅Π²ΠΎΠΉ, ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΠΉ
Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠΉ ΠΏΠ°ΠΊΠ΅Ρ:
- PHP CryptoPro Service (docker) with HTTP API, ΠΈΠ΄Π΅Π°Π»ΡΠ½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ Ρ PHP ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ΠΌ;
- cryptopro, Ρ ΠΎΡΠΎΡΠΈΠΉ Π²Π°ΡΠΈΠ°Π½Ρ Ρ PHP ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΈ HTTP REST-ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ;
- CryptoProCSP, ΠΎΠ½ ΠΊΠ»Π°ΡΡΠ½ΡΠΉ, Π½ΠΎ:
- Π΄Π°Π²Π½ΠΎ Π½Π΅ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ»ΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π²Π΅ΡΡΠΈΡ
PHP5.6
- Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΈΡΠ»ΠΎΡΡ ΠΏΠΎΠ΄ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ
Dockerfile
- Π΄Π°Π²Π½ΠΎ Π½Π΅ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ»ΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π²Π΅ΡΡΠΈΡ