Я работаю над созданием API, который требует подписи и отправки зашифрованных сообщений по TLS. TLS - это HTTP/SSL.
Сами сообщения представляют собой не более нескольких сотен килобайт данных JSON, зашифрованных с помощью асимметричных ключей. Инфраструктура PK решается сетью доверия, и стороны находятся в одном городе, поэтому мы можем обмениваться ключами лично.
Мы не можем положиться на GnuPG/PGP, так как поддержка библиотек на языках, которые мы используем, неизвестна, и мы бы предпочли напрямую использовать OpenSSL.
Мы хотим отправить в виде одного открытого текста следующее сообщение и его подпись. С GnuPG/PGP это может выглядеть так:
-----BEGIN PGP SIGNED MESSAGE-----
#
# Encrypted message data here...
#
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.7 (MingW32)
iQIVAwUBPOCy1mM8BmRItYg4AQKWrA//fR5LKFyt+78CMtfpzkHgCVFyEe2ImsBy
FJ2HvzRIP4Bvor1iEOZ9A0fux8gBNXrvEtaDXSiGyXH+Ru4F3g1+K119fgBPRBgo
oOTbSLZSlRYWp8mRALsiWXKEHWgpy4zIHVTY6tPJdxFBZYJXnQj/4S6MRP+eJdam
rU8ufExxaqQPw+KCNEVCSk1yHZ886k6MTSa1oDqUOLiM1cBDCtD8Jv+BE0gLHPb9
1h7lEka8QGNe+P7iiUzvsuD7HCL6dGb6T70/KBBHIP6lDwOgUX3eTd8e+I3jczs9
RyEmd6G4swM3IzCD1km+SN5/k5QsMjd6Lw5fB95Mroi47QNpya8ifYbMgCg0+BVm
c7QOwr79+9cJiKhEICbMf5pKQWzP/AznaYlM0IOGGCvxa5loLl7BbtvktVMocitF
zWM9SB0kmSu3OlMxjXYcBsyHCHN4dTpCD9d1jfbgth9YV06sWpONLohdaWx+n9kO
CxsSDGI+aW8sGKHWonw0Uy4UAvUzY3tiZTzTF+FzoJzhy13KK1j4Y0MMx1jZ68f9
R9wSKVdiyXwuMXkWWK0uxSZuBz4mTofZ7YmFm7UdxOH4bMnO+rWNCSPR7md+X0j1
nQSwtxEnIu7Tucb/ZG3t9kR+KTByPTu7tHINr4HFd8m2Cu7Wi10TP/EBtXbtYA/1
SBaUXcbgCD8=
=Hn6O
-----END PGP SIGNATURE-----
Однако я не смог найти подходящий способ сделать то же самое с OpenSSL. smime
как я понимаю, это не подходит, так как мы не отправляем письма.
Эти два куска:
$ openssl enc -base64 < minimum.json.crypt
sxuEWSFRXxVOylBA/Z38slAQeY9hzypEt9ZmGDSORBID0VMyvbj1bF5jnfA/rpKm
2HsKh8mZq+Gcgf9iPvVoOpzIgAdVqI3CK6CjXCi87y9LL0alYXXFs/ZEQp46URDv
cv8tiOjEnx+u/c1RpyKHHq0QBKStN8jrdQfVCWfoGhw8bS4SfyXxX/OcngKBp094
lcoR9DTz4F/pkvLwrr0wwCMv2/ayqI5Q6ZzB5Y9OUrb4smLNK/Q7PWsO4sYcGoPL
WpmjZ1TNPCvepWQhqEGrVAHxxCdjNczqaRgia5wqZnlLfhCRRHQqADN0nApabAvS
kXerrgcY25Qy4bWjCk/Y0Q==
$ openssl enc -base64 -in minimum.json.sig
onVyfVDakk6DP28T40bt2C2xF+gEZwssemNQIg+pz/PjgTQRTDN42K9p81aSkbkN
Wdlab/TqJCmGNZuIhGKe6f+oDTL6PNofEDr8QGyLzv5Lk+2+/fcD/OV2bI6RV2Ar
95on3jzwKIsaDyMT/9oHtBf7EiZptNLpGp8Fkp+4tfgt7z5w1Di4sA1sCUVdgmsR
KIEa2MaOQxKG9DyrxOz/Fjz7RUPMRjCF+AJ8EFkGfzQmj+PmOxwnRW4nMVVqf858
59NXWy1W5L5Smf1/XC14eLh6LMcmJpHeiEIVu9RMKAVJagMP8eOVxM4QAt1Jvq9W
6Dqmako0I+0Rjt9FxFTRAQ==
Подпись генерируется из SHA1 исходного незашифрованного тела сообщения.
Мы намерены отправить весь отформатированный документ в виде тела HTTP POST
. Какой формат правильный, есть ли стандарт?