| ||||
| ||||
Поставлена задача в автоматическом режиме подписывать исходящие письма и проверять подписи у входящих писем. Имеем текстовый файл test.txt Кодируем его в base64 и добавляем к нему заголовки: Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: base64 После чего выполняем: cryptcp.exe -signf -dn dimman\@mymail.ru -der -cert -crl test.txt -sdhttp://cryptopro.ru/tsp/tsp.srf полученный test.txt.sig также кодируем в base64 и из всего этого формируем письмо в соответствии с RFC 2633. Отправляем, и (о радость) БАТ воспринимает это письмо как корректно подписанное. Проделываем обратную задачу. Из пришедшего письма (сформированного и подписанного БАТом) выдираем составляющие - текст и подпись и прверяем с помощью: cryptcp.exe -vsignf -u test.txt И тут ждет облом: Подпись повреждена. Проделываем то же самое, но с письмом, сформированным с помощью cryptcp и .... подпись в порядке :( Где же глюк? (3 варианта ответа) БАТ, cryptcp, мои руки | ||||
Ответы: | ||||
| ||||
Скорее всего руки, в процессе выдирания текста и подписи из письма, подписанного батом. | ||||
| ||||
Дык скрипт один. Алгоритм выдирания один. А результат разный для писем сформированных разным образом. | ||||
| ||||
Вот мб как раз в алгоритме и проблема. Я никогда не слышал о том, что бат формирует письма не полностью соответствующие RFC | ||||
| ||||
Попробовал формировать/проверять письма разными способами. Detached подпись. И все равно получается следующее: Формируем сообщение с помощью cryptcp -signf BAT читает письмо как корректно подписанное CAPICOM читает письмо как корректно подписанное cryptcp -vsignf читает письмо как корректно подписанное Формируем сообщение с помощью CAPICOM CAPICOM читает письмо как корректно подписанное BAT читает письмо как корректно подписанное cryptcp -vsignf читает письмо как корректно подписанное Формируем сообщение с помощью THE BAT CAPICOM подпись не верна BAT читает письмо как корректно подписанное cryptcp -vsignf подпись не верна | ||||
| ||||
А можно взглянуть на письмо, сформированное батом и на то, что дается для проверки CAPICOM и cryptcp? | ||||
| ||||
письмо (опускаю заголовки серверов) Return-Path: <admin@хххххх.ru> X-Original-To: first@хххххх.ru Delivered-To: first@хххххх.ru Received: from localhost.localdomain (unknown [192.168.140.1]) by mail.ххххх.ru (Postfix) with ESMTP id 4B1251CC43 for <first@хххххх.ru>; Fri, 10 Nov 2006 15:04:05 +0300 (MSK) Received: from mail.хххххх.ru (mail.хххххх.ru [ххх.ххх.ххх.ххх]) by mail.хххх.ru (Postfix) with ESMTP for <first@хххххх.ru>; Fri, 10 Nov 2006 15:04:05 +0300 (MSK) Received: by mail.хххххх.ru (Postfix, from userid 1028) id AAAD03E3CEB; Fri, 10 Nov 2006 15:28:20 +0300 (MSK) Received: from localhost (gw-of.хххххххх.ru [ххх.ххх.ххх.ххх]) by mail.ххххххх.ru (Postfix) with ESMTP id 39CB13E3C82 for <first@ххххххх.ru>; Fri, 10 Nov 2006 15:28:14 +0300 (MSK) Date: Fri, 10 Nov 2006 15:28:07 +0300 From: Dmitry Kozlov <admin@хххххххх.ru> Reply-To: Dmitry Kozlov <admin@ххххххх.ru> Organization: хххххх X-Priority: 3 (Normal) Message-ID: <1296646087.20061110152807@хххххх.ru> To: first@хххххх.ru Subject: Test cryptopro MIME-Version: 1.0 Content-Type: multipart/signed; protocol="application/pkcs7-signature"; boundary="----------7EBD2133F126E" X-Spam-Checker-Version: SpamAssassin 3.0.4 (2005-06-05) on mail.хххххх.ru X-Spam-Status: No, score=-101.5 required=4.0 tests=BAYES_00,PRIORITY_NO_NAME, USER_IN_WHITELIST autolearn=no version=3.0.4 X-Spam-Level: This is a cryptographically signed message in MIME format. ------------7EBD2133F126E Content-Type: text/plain; charset=koi8-r Content-Transfer-Encoding: quoted-printable =F4=C5=D3=D4=CF=D7=CF=C5 =D0=C9=D3=D8=CD=CF. ------------7EBD2133F126E Content-Type: application/pkcs7-signature; name="smime.p7s" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smime.p7s" Content-Description: S/MIME Cryptographic Signature MIIE6AYJKoZIhvcNAQcCoIIE2TCCBNUCAQExDDAKBgYqhQMCAgkFADALBgkqhkiG9w0BBwGg ggPbMIID1zCCA4SgAwIBAgIKESdrQgABAAAZHTAKBgYqhQMCAgMFADBlMSAwHgYJKoZIhvcN AQkBFhFpbmZvQGNyeXB0b3Byby5ydTELMAkGA1UEBhMCUlUxEzARBgNVBAoTCkNSWVBUTy1Q Uk8xHzAdBgNVBAMTFlRlc3QgQ2VudGVyIENSWVBUTy1QUk8wHhcNMDYxMTAyMTQzMTQ2WhcN MDcxMTAyMTQ0MTQ2WjCBuzEhMB8GCSqGSIb3DQEJARYSYWRtaW5Aa3Vyc2tsaW5lLnJ1MQsw CQYDVQQGEwJSVTETMBEGA1UECBMKQ2FsaWZvcm5pYTEUMBIGA1UEBxMLTG9zIEFuZ2VsZXMx GzAZBgNVBAoTElBhcmFtb3VudCBQaWN0dXJlczEPMA0GA1UECxMGQXJ0aXN0MTAwLgYDVQQD DCfQkNGA0L3QvtC70YzQtCDQqNCy0LDRgNGG0LXQvdC10LPQs9C10YAwYzAcBgYqhQMCAhMw EgYHKoUDAgIkAAYHKoUDAgIeAQNDAARADi+7ddH2lQARVtzvqB+1Pipihoj35/T/1c9xa50s U2hoP9LBj8B7DQIiIMOx1AuhDarV90P48zhxUwRsZVKr5aOCAbkwggG1MA4GA1UdDwEB/wQE AwIE8DAZBgkqhkiG9w0BCQ8EDDAKMAgGBiqFAwICFTAdBgNVHQ4EFgQUHKNZhQGr9mDBrWS4 04Ov1ZTPBCAwEwYDVR0lBAwwCgYIKwYBBQUHAwQwHwYDVR0jBBgwFoAUSFUwGMs8IqkX12Ji ZAWnpMyGihEwUgYDVR0fBEswSTBHoEWgQ4ZBaHR0cDovL3d3dy5jcnlwdG9wcm8ucnUvY2Vy dGVucm9sbC9UZXN0JTIwQ2VudGVyJTIwQ1JZUFRPLVBSTy5jcmwwgd4GCCsGAQUFBwEBBIHR MIHOMGQGCCsGAQUFBzAChlhodHRwOi8vd3d3LmNyeXB0b3Byby5ydS9DZXJ0RW5yb2xsL0Ny eXB0by5jcnlwdG9wcm8ucnVfVGVzdCUyMENlbnRlciUyMENSWVBUTy1QUk8oMSkuY3J0MDEG CCsGAQUFBzABhiVodHRwOi8vd3d3LmNyeXB0b3Byby5ydS9vY3NwL29jc3Auc3JmMDMGCCsG AQUFBzABhidodHRwOi8vd3d3LmNyeXB0b3Byby5ydS9vY3NwbmMvb2NzcC5zcmYwCgYGKoUD AgIDBQADQQDhOmR0pbiql7oTc2NXsc9DpZ3HT7uHZ6cRKWNXD6TbZwNBoRVpK2T2kRIfbP8A SNJ4uMk5/fxyXWZe5sRtYCAJMYHVMIHSAgEBMHMwZTEgMB4GCSqGSIb3DQEJARYRaW5mb0Bj cnlwdG9wcm8ucnUxCzAJBgNVBAYTAlJVMRMwEQYDVQQKEwpDUllQVE8tUFJPMR8wHQYDVQQD ExZUZXN0IENlbnRlciBDUllQVE8tUFJPAgoRJ2tCAAEAABkdMAoGBiqFAwICCQUAMAoGBiqF AwICEwUABEDN3QXC1sy7DlTA05HxeKJf5WErl1/E11AQgex2Q3oEoVHz+N2UMelDP+8ruEWM xFQs58n0IDqtH82no7DGbzzI ------------7EBD2133F126E-- в cryptcp соответственно подсовываю файл содержащий Content-Type: text/plain; charset=koi8-r Content-Transfer-Encoding: quoted-printable =F4=C5=D3=D4=CF=D7=CF=C5 =D0=C9=D3=D8=CD=CF. сигнатуры не совпадают | ||||
| ||||
Размер файла 135 байт? | ||||
| ||||
smime.p7s в кодировке der - 1260 байт ибо бат вместе с сертификатом шлет cryptcp.exe -signf -dn admin@kurskline.ru -der -cert дает точно такой же размер файлы в обоих случаях идентичны кроме последних строк (где собссно сигнатура находится) | ||||
| ||||
Нет, размер файла который содержит Content-Type: text/plain; charset=koi8-r Content-Transfer-Encoding: quoted-printable =F4=C5=D3=D4=CF=D7=CF=C5 =D0=C9=D3=D8=CD=CF. при проверке | ||||
| ||||
Нашел причину. Точнее причины. 1. Старые добрые \n и \r\n. Ну это легко поправилось. 2. The BAT в большом тексте с большим количеством идущих подряд пробелов оные пробелы не кодирует в quoted-printable. Кодирует только первый, последний и в концах строк для корректного переноса. А у меня библиотека выдирания частей оказалась слишком правильная. Она эти пробелы превращала в =20. Таким образом сигнатуры и не совпадали. Век живи -век учись. | ||||