Last active
February 25, 2024 09:58
-
-
Save abakum/4f714770a23a2b5dc620760b0bbf5d2a to your computer and use it in GitHub Desktop.
rutoken for OpenSSH client
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
У меня есть RSA:2048 ключ в шифрованном паролем id_rsa.ppk | |
Запишем его в шифрованный паролем PKCS #8 pem PRIVATE KEY ENCRYPTED | |
MINGW64 | |
`pacman -S mingw-w64-x86_64-putty` | |
`puttygen id_rsa.ppk` | |
Вводим пароль и в меню Conversion~Export OpenSSH key~id_rsa.pem | |
Чтоб не вводить пароль расшифруем его в PKCS #1 pem https://gist.github.com/tuansoibk/0b1f279be5c1b782d95f4e15af1442cb | |
Не забыть удалить этот расшифрующий и подписывающий ключ (РиПК) PRIVATE KEY | |
`openssl rsa -in id_rsa.pem -out priv.pem` | |
`del id_rsa.ppk id_rsa.pem` | |
Если бы у меня не было ключа его можно было создать | |
`openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out priv.pem` | |
Извлечём шифрующий и проверяющий подпись ключ (ШиППК) PUBLIC KEY | |
`openssl rsa -in priv.pem -pubout -out pub.pem` | |
Запишем ШиППК в Рутокен (именно в таком порядке сначала ШиППК потом РиПК) | |
используя GnuTLS https://www.man7.org/linux/man-pages/man1/p11tool.1.html | |
`pacman -S mingw-w64-x86_64-gnutls` | |
`p11tool --provider c:/windows/system32/rtpkcs11ecp.dll --login --load-pubkey pub.pem --write --label 2048 --id 32303438` | |
используя OpenSC https://man.archlinux.org/man/pkcs11-tool.1 | |
`openssl rsa -in priv.pem -pubout -outform der -out pub.der` | |
`pkcs11-tool --module rtPKCS11ECP.dll -ly pubkey -w pub.der -a 2048 -d 32303438` | |
Не обращаем внимание на ошибку | |
Запишем РиПК в Рутокен | |
`p11tool --provider c:/windows/system32/rtpkcs11ecp.dll --login --load-privkey priv.pem --write --label 2048 --id 32303438` | |
или | |
`openssl rsa -in priv.pem -outform der -out priv.der` | |
`pkcs11-tool --module rtPKCS11ECP.dll -ly privkey -w priv.der -a 2048 -d 32303438` | |
Если бы у меня не было ключа его можно было создать сразу на Рутокене | |
Внимание! После ввода пинкода может сложится ощущение что программка висит, но это не так - надо ждать (для rsa:4096 4-5 минут)! | |
У Рутокена проблема с --id -d именем контейнера ключей (ИКК) для RSA | |
вернее pkcs11-tool и p11tool и пишут и читают ИКК но `В панель управления Рутокен` его видно под другим именем | |
хотя если генерить ключи в ГОСТе то ИКК отражаются правильно | |
`pkcs11-tool.exe --module rtPKCS11.dll -lk --key-type rsa:2048 -a 2048 -d 32303438` | |
Посмотрим Рутокен по метке --label -a | |
`p11tool --provider c:/windows/system32/rtpkcs11ecp.dll --login --list-all pkcs11:object=2048` | |
или | |
`pkcs11-tool --module rtPKCS11ECP.dll -Ola 2048` | |
Посмотрим Рутокен по ИКК --id -d | |
`p11tool --provider c:/windows/system32/rtpkcs11ecp.dll --login --list-all pkcs11:id=2048` | |
или | |
`pkcs11-tool --module rtPKCS11ECP.dll -Old 32303438` | |
Прочитаем ШиППК без ввода пинкода | |
`openssl pkey -engine pkcs11 -inform engine -pubin -in "pkcs11:object=2048" -pubout -out 2048.pem` | |
Извлечём ШиППК из РиПК | |
`openssl pkey -engine pkcs11 -inform engine -in "pkcs11:object=2048" -pubout -out 2048.pem` | |
Рутокены ECP 2.0 и 3.0 это уже сертифицированные свистки и поэтому ключи там неизвлекаемые. | |
Прочитать РиПК даже импортированный в Рутокен не получется | |
Если что-то не так можно удалить | |
`p11tool --provider c:/windows/system32/rtpkcs11ecp.dll --login --delete pkcs11:object=2048` | |
или | |
`pkcs11-tool --module rtPKCS11ECP.dll -Olba 2048` | |
Создадим запрос на сертификат (этикетка koka на ШиППК) CERTIFICATE REQUEST | |
`openssl req -new -key priv.pem -out cert.csr -subj "/CN=koka"` | |
или используя GnuTLS | |
`certtool --generate-request --load-privkey priv.pem --load-pubkey pub.pem --outfile cert.csr` | |
или с Рутокена | |
`openssl req -new -engine pkcs11 -keyform engine -key "pkcs11:object=2048" -out req.csr -subj "/CN=koka"` | |
или используя GnuTLS | |
`certtool --generate-request --load-privkey "pkcs11:object=2048" --load-pubkey "pkcs11:object=2048" --outfile cert.csr` | |
Самоподпишем запрос на 10 лет CERTIFICATE | |
`openssl x509 -req -in cert.csr -signkey priv.pem -out cert.pem -days 3653` | |
Ну или сразу самоподпишем | |
`openssl req -x509 -key priv.pem -out cert.pem -subj "/CN=koka" -days 3653` | |
или с Рутокена | |
для GnuTLS | |
`openssl req -x509 -engine pkcs11 -keyform engine -key "pkcs11:object=2048" -out cert.pem -subj "/CN=koka" -days 3653` | |
для OpenSC | |
`openssl req -x509 -engine pkcs11 -keyform engine -key "pkcs11:object=2048" -outform der -out cert.der -subj "/CN=koka" -days 3653` | |
Запишем сертификат в Рутокен | |
`p11tool --provider c:/windows/system32/rtpkcs11ecp.dll --login --load-certificate cert.pem --write --label 2048 --id 32303438` | |
или | |
`pkcs11-tool --module rtPKCS11ECP.dll -ly cert -w cert.der -a 2048 -d 32303438` | |
Попробуем подключится к sshd | |
ssh -I rtPKCS11ECP.dll [email protected] | |
вводим пинкод rutoken | |
Это работает! | |
Видел openssh-gostcrypto может пригодятся ключи по ГОСТу | |
Создадим новый ключ по ГОСТ Р 34.10-2012 | |
`pkcs11-tool.exe --module rtPKCS11ECP.dll -lk --key-type GOSTR3410-2012-256:A --usage-derive -a 256 -d 323536` | |
Запрос на сертификат | |
`openssl req -new -engine rtengine -keyform engine -key "pkcs11:object=256" -out req.csr -subj "/CN=koka"` | |
Самоподписанный сертификат | |
`openssl req -x509 -engine rtengine -keyform engine -key "pkcs11:object=256" -out cert.pem -subj "/CN=koka" -days 3653` | |
для OpenSC | |
`openssl req -x509 -engine rtengine -keyform engine -key "pkcs11:object=256" -outform der -out cert.der -subj "/CN=koka" -days 3653` | |
Запишем подписанный сертификат c ШиППК в Рутокен | |
`p11tool --provider c:/windows/system32/rtpkcs11ecp.dll --login --load-certificate cert.pem --write --label 256 --id 323536` | |
или | |
`pkcs11-tool --module rtPKCS11ECP.dll -l -y cert -w cert.der -d 323536 -a 256` | |
Прочитаем ШиППК без ввода пинкода | |
`openssl pkey -engine rtengine -inform engine -pubin -in "pkcs11:object=256" -pubout -out 256.pem` | |
Извлечём ШиППК из РиПК | |
`openssl pkey -engine rtengine -inform engine -in "pkcs11:object=256" -pubout -out 256.pem` |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Для самых маленьких:
Несимметричные шифры они такие симметричные:
То, что закрывается открытым ключём открывается закрытым.
И наоборот:
То, что подписывается закрытым ключём проверяется открытым.