Как проверить, если банка со знаком содержит метку времени?

Это зависит от Ваших навыков с Ruby и/или Groovy, есть ли у Вас системы Java прежней версии для контакта с, и где Вы хотите развернуть свои приложения.

я был первоначально взволнован с направляющими. В то время не было опции развертывания на серверах приложений на работе, так как работа является всем Java. Это изменилось. Я уже не мог отказаться от инфраструктуры Java и приложений на месте и переключиться на Ruby, даже при том, что я думал, что направляющие были потрясающими. Grails работает, потому что мы можем смешивание и подгонка Groovy с существующими решениями для Java.

За пределами работы, Ruby легче найти хостинг для на нижнем уровне ценового спектра. Поскольку Grails использование много существующего Java предполагает, что .war файлы, даже для небольшого приложения, имеют тенденцию быть большими. Если у Вас есть выделенный сервер, это не проблема, но пытающийся работать на общем хостинге с RAM на 128 МБ не работает.

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

На основе Ваших определенных критериев, направляющие могут быть лучшей платформой для изучения. Если у Вас есть знание Java или багаж;-), необходимо посмотреть на Grails.

18
задан Mathias Brossard 20 June 2011 в 18:51
поделиться

1 ответ

Только что потратил последние 2 часа на поиски этой проблемы и, наконец, нашел способ определить, действительно ли файл jar содержит информацию о отметке времени в файле блока подписи. Я мог видеть сертификат GlobalSign в шестнадцатеричном редакторе файла /META-INF/FOO.DSA, но я не нашел никакого инструмента, который бы распечатал нужную вам информацию.

Вы можете переименовать файл FOO.DSA в foo .p7b, чтобы открыть его в Windows CertMgr, но он также не отображает информацию о времени. Мне также не удалось использовать OpenSSL для проверки файла DSA (это формат файла PKCS # 7).

Я придумал следующий код, который покажет информацию о подписи времени и дату создания отметки времени. Надеюсь, это хорошее начало для вас. Мне также не удалось использовать OpenSSL для проверки файла DSA (это формат файла PKCS # 7).

Поэтому я придумал следующий код, который покажет информацию о подписи времени и дату создания метки времени. Надеюсь, это хорошее начало для вас. Мне также не удалось использовать OpenSSL для проверки файла DSA (это формат файла PKCS # 7).

Поэтому я придумал следующий код, который покажет информацию о подписи времени и дату создания метки времени. Надеюсь, это хорошее начало для вас. Вам нужны bcprov-jdk16-144.jar, bctsp-jdk16-144.jar и bcmail-jdk16-144.jar в пути к классам. Получите их из Bouncycastle

package de.mhaller.bouncycastle;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.security.Security;
import java.util.Collection;
import java.util.jar.JarEntry;
import java.util.jar.JarInputStream;

import org.bouncycastle.asn1.DEREncodable;
import org.bouncycastle.asn1.cms.Attribute;
import org.bouncycastle.asn1.cms.AttributeTable;
import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers;
import org.bouncycastle.cms.CMSException;
import org.bouncycastle.cms.CMSSignedData;
import org.bouncycastle.cms.SignerId;
import org.bouncycastle.cms.SignerInformation;
import org.bouncycastle.cms.SignerInformationStore;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.tsp.TSPException;
import org.bouncycastle.tsp.TimeStampToken;
import org.bouncycastle.tsp.TimeStampTokenInfo;

public class VerifyTimestampSignature {

    private static boolean found;

    public static void main(String[] args) throws Exception {
        if (args == null || args.length != 1) {
            System.out.println("usage: java " + VerifyTimestampSignature.class.getName()
                    + " [jar-file|dsa-file]");
            return;
        }

        BouncyCastleProvider provider = new BouncyCastleProvider();
        Security.addProvider(provider);

        String filename = args[0];

        if (filename.toLowerCase().endsWith(".dsa")) {
            InputStream dsa = new FileInputStream(filename);
            printDSAInfos(filename, dsa);
            return;
        }

        if (filename.toLowerCase().endsWith(".jar")) {
            InputStream jar = new FileInputStream(filename);
            JarInputStream jarInputStream = new JarInputStream(jar);
            JarEntry nextJarEntry;
            do {
                nextJarEntry = jarInputStream.getNextJarEntry();
                if (nextJarEntry == null) {
                    break;
                }
                if (nextJarEntry.getName().toLowerCase().endsWith(".dsa")) {
                    printDSAInfos(nextJarEntry.getName(), jarInputStream);
                }
            } while (nextJarEntry != null);
        }

        if (!found) {
            System.out.println("No certificate with time stamp information found in " + filename);
        } else {
            System.out.println("Found at least one time stamp info");
            System.out.println("Note: But it was NOT verified for validity!");
        }
    }

    private static void printDSAInfos(String file, InputStream dsa) throws CMSException,
            IOException, TSPException {
        System.out.println("Retrieving time stamp token from: " + file);
        CMSSignedData signature = new CMSSignedData(dsa);
        SignerInformationStore store = signature.getSignerInfos();
        Collection<?> signers = store.getSigners();
        for (Object object : signers) {
            SignerInformation signerInform = (SignerInformation) object;
            AttributeTable attrs = signerInform.getUnsignedAttributes();
            if (attrs == null) {
                System.err
                        .println("Signer Information does not contain any unsigned attributes. A signed jar file with Timestamp information should contain unsigned attributes.");
                continue;
            }
            Attribute attribute = attrs.get(PKCSObjectIdentifiers.id_aa_signatureTimeStampToken);
            DEREncodable dob = attribute.getAttrValues().getObjectAt(0);
            CMSSignedData signedData = new CMSSignedData(dob.getDERObject().getEncoded());
            TimeStampToken tst = new TimeStampToken(signedData);

            SignerId signerId = tst.getSID();
            System.out.println("Signer: " + signerId.toString());

            TimeStampTokenInfo tstInfo = tst.getTimeStampInfo();
            System.out.println("Timestamp generated: " + tstInfo.getGenTime());
            found = true;
        }
    }
}
10
ответ дан 30 November 2019 в 07:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: