Подписание файлов в веб
(1 чел.) (1) гость
  • Страница:
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • ...
  • 8

ТЕМА: Подписание файлов в веб

Re: Подписание файлов в веб 2 года, 6 мес. назад #2929

  • developer
  • Захожу иногда
  • Постов: 51
  • Репутация: 3
С помощью этого метода можно подписать хэш файла, а на проверку отправлять сам файл, и все будет корректно проверятся. То есть мы пропускаем хэширование хэша внутри метода.

/**
     * Реализоываем метод сами, так как необходимо подписывать хэш
     * и пропускать стадию хэширования внутри метод подписания
     */
    private static String createCMSSignatureFromHash(String storageName,
                                                     String storagePath, String alias, String password, String dataToSign)
            throws Exception {

        KeyStore keyStore = null;
        ResultWrapper rw;
        byte[] dataToSignByte = Hex.decode(dataToSign);
        Storage storage = Storage.get(storageName);

        keyStore = KeyStoreUtil.getKeyStore(storage, storagePath,
                password.toCharArray(), getProvider());
        X509Certificate cert = (X509Certificate) keyStore.getCertificateChain(alias)[0];

        PrivateKey privateKey = KeyStoreUtil.getPrivateKey(storage,
                storagePath, alias, password.toCharArray(), getProvider());

        CertStore chainStore = CertStore.getInstance("Collection",
                new CollectionCertStoreParameters(Arrays.asList(cert)),
                getProvider().getName());

        CMSSignedDataGenerator generator = new CMSSignedDataGenerator();

        Attribute attr = new Attribute(CMSAttributes.messageDigest, new DERSet(new DEROctetString(dataToSignByte)));
        Attribute attrContentType = new Attribute(CMSAttributes.contentType, new DERSet(CMSObjectIdentifiers.data));

        ASN1EncodableVector vector = new ASN1EncodableVector();
        vector.add(attr);
        vector.add(attrContentType);

        String alg = null;

        if (cert.getSigAlgOID().equals(PKCSObjectIdentifiers.sha1WithRSAEncryption.getId()))
            alg = CMSSignedDataGenerator.DIGEST_SHA1;
        else if (cert.getSigAlgOID().equals(PKCSObjectIdentifiers.sha256WithRSAEncryption.getId()))
            alg = CMSSignedDataGenerator.DIGEST_SHA256;
        else if (cert.getSigAlgOID().equals(KNCAObjectIdentifiers.gost34311_95_with_gost34310_2004.getId()))
            alg = CMSSignedDataGenerator.DIGEST_GOST34311_95;
        else if (cert.getSigAlgOID().equals(CryptoProObjectIdentifiers.gostR3411_94_with_gostR34310_2004.getId()))
            alg = CMSSignedDataGenerator.DIGEST_GOST3411_GT;

        generator.addSigner(privateKey, cert, alg, new AttributeTable(vector), null);
        generator.addCertificatesAndCRLs(chainStore);

        CMSSignedData s = generator.generate(CMSSignedDataGenerator.DATA, null, false, getProvider().getName());
        byte[] signedDataEncoded = s.getEncoded();

        return new String(Base64.encode(signedDataEncoded), "ASCII");
    }
Изменено: 2 года, 6 мес. назад от developer.
Спасибо сказали: devman

Re: Подписание файлов в веб 2 года, 6 мес. назад #2943

  • slavaviber
  • Новый участник
  • Постов: 8
  • Репутация: 0
как я понимаю, эта функция для отработке на стороне сервера, а на стороне клиента такой номер не прокатывает?

Раньше на паскале было весело

begin
asm
{
}
end.

и в асме скидываешь любой код, который нао напрямую в регистры.

Жаль, что такого в Яваскрипте нет, иначе любого криптопровайдера можно было бы встраивать прямо в браузер

Re: Подписание файлов в веб 2 года, 5 мес. назад #2955

  • Developer.KZ
  • Осваиваюсь на форуме
  • Постов: 31
  • Репутация: 0
devman написал:
Я так понимаю есть 2 основных сценария подписания в веб:
1. Файл загружает пользователь. В этом случае логика проста: выбрать файл, подписать, отправить на сервер. Сервер проверяет подпись.
2. Файл сформирован системой. Часто сформированный файл не должен быть доступен для редактирования пользователем (а значит пользователь не сможет его скачать и пойти по сценарию 1). Вот как быть в таком случае и не ясно.


Необходимо реализовать эл подпись в личном кабинете (кабинет на PHP\Apache\MySQL) для текста (заполненная форма) подписывался и после записи в БД проверять на сервере, результат проверки отображать получателю формы. Т.е. можно ли установить NCALayer на веб сервер (FreeBsd) и на него обращаться локально для подписания и проверки подписи?

Re: Подписание файлов в веб 2 года, 5 мес. назад #2957

  • Developer.KZ
  • Осваиваюсь на форуме
  • Постов: 31
  • Репутация: 0
При запуске NCALayer.sh ругается:
"Не найден пакет xtrem. Установите пакет и запустите инсталлятор повторно."
Что это за пакет? Где его взять?

Re: Подписание файлов в веб 2 года, 5 мес. назад #2958

  • ugotbug
  • Завсегдатай
  • Постов: 225
  • Репутация: 14
Это ошибка в названии. Пакет xterm.
Могущественный обладатель кольца Знаний

Re: Подписание файлов в веб 2 года, 5 мес. назад #2959

  • Developer.KZ
  • Осваиваюсь на форуме
  • Постов: 31
  • Репутация: 0
Установил всё что нужно, теперь такое сообщение и в директории установки ничего нет

"Ошибка при создании структуры меню!
Поздравляем, вы успешно установили NCALayer! Не забудьте установить корневые сертификаты в браузер."
  • Страница:
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • ...
  • 8
FaLang translation system by Faboba