Techblog

Herzlich Willkommen im Communardo Techblog, dem Entwickler-Weblog von Communardo. An dieser Stelle werden Ideen, Problemlösungen, Tipps und Problemstellungen rund um die Entwicklung webbasierter Software vorgestellt.

techblog-teaser

Appcelerator Titanium Studio: Lokalisierung mittels Java-Properties-Dateien

, von

Die erste Version unserer Communote App entwickelten wir noch mit Rhodes. Die entstandene App fühlte sich leider nicht so nativ an wie wir uns das wünschen. Zusätzlich war sie recht fehleranfällig. Mit der kommenden Version setzen wir auf Titanium von Appcelerator.

Für die Bearbeitung von Lokalisierungen setzt Titanium auf ein eigenes XML-Format. Um zentralisiert Übersetzungen vorzunehmen verwenden wir allerdings Pootle, welches dieses Format leider nicht unterstützt. Dafür unterstützt Pootle allerdings Dateien im Format von Java-Properties.

Artikel vollständig lesen

Schaltsekunde macht Probleme in Java Anwendungen

, von
1 Kommentar

Wie am Wochenende auf Heise.de zu lesen war, wurde eine positive Schaltsekunde eingeschoben, um einer Verschiebung zwischen Uhrzeit und Tagesverlauf entgegenzuwirken. Genau diese Sekunde führt auf Linuxsystemen zu Problemen.

Die Auswirkungen sind:

  • extrem hohe CPU-Last
  • Anwendungen können nich mehr erreicht werden
  • Server können nicht mehr erreicht werden

Um dieses Problem zu beheben, gibt es zwei Lösungen. Die erste Lösung ist ein Neustart des Servers.

Als zweite Lösung des Problems können folgende Befehle ausgeführt werden:

/etc/init.d/ntpd stop; date; date `date +”%m%d%H%M%C%y.%S”`; date

/etc/init.d/ntpd start

Nach dem erfolgreichen Ausführen der Befehle sieht man wie die CPU-Last abnimmt und der Server ist wieder erreichbar.

ASP.NET security update against #hashDoS attacks

, von

In a presentation (“Efficient Denial of Service Attacks on Web Application Platforms”, Dec 28th 2011, PDF) at 28th Chaos Communication Congress in Berlin (#28c3) there have been published details on how to perform so called “hash collision attacks” on webservers.

This does not only affect Microsoft technology (ASP.NET), but also Java, Python, Ruby, PHP, v8/node.js, …

Microsoft has already reacted and will release an out-of-band security update today.

For more details see:

ASP.NET Sicherheitsupdate gegen #hashDoS Angriffe

, von


Im Rahmen eines Vortrags (“Efficient Denial of Service Attacks on Web Application Platforms”, 28.12.2011, PDF) auf dem 28. Chaos Communication Congress in Berlin (#28c3) wurde eine Möglichkeit vorgestellt, Webserver mittels einer sogenannten “hash collision attack” zu überlasten, so dass diese praktisch zum Stillstand kommen.

Betroffen ist dabei nicht nur Microsoft-Technologie (ASP.NET), sondern auch Java, Python, Ruby, PHP, v8/node.js, …

Microsoft hat bereits reagiert und veröffentlicht heute ein entsprechendes Sicherheitsupdate für ASP.NET.

Mehr Details unter:

S/MIME mit BouncyCastle 1.46

, von
3 Kommentare

Mit dem Ende Februar veröffentlichten BouncyCastle 1.46 wurden die APIs für die Ver- und Entschlüsselung von Nachrichten nach dem S/MIME-Standard teils stark verändert. Dies erhöht auf der einen Seite die Flexibilität, erfordert aber auf der anderen Seite eine Umstellung von bestehendem Code, wenn dieser nicht mehr die nun als “deprecated” gekennzeichneten APIs nutzen soll.

Ein Beispiel für die Verschlüsselung einer S/MIME-Nachricht sieht jetzt folgendermaßen aus:

<code>    public MimeMessage encryptMessage(MimeMessage message) throws Exception {
        SMIMEEnvelopedGenerator smeg = new SMIMEEnvelopedGenerator();
        for (Address recipient : message.getAllRecipients()) {
            Collection certificates = getCertificates((InternetAddress) recipient);
            for (Certificate cert : certificates) {
                RecipientInfoGenerator recipientInfoGen = new JceKeyTransRecipientInfoGenerator(
                        (X509Certificate) cert);
                smeg.addRecipientInfoGenerator(recipientInfoGen);
            }
        }
        OutputEncryptor encryptor = new JceCMSContentEncryptorBuilder(
                CMSAlgorithm.AES256_CBC).build();
        MimeBodyPart encryptedContent = smeg.generate(message, encryptor);
        MimeMessage result = new MimeMessage(message);
        result.setContent(encryptedContent.getContent(), encryptedContent
                .getContentType());
        result.saveChanges();
        return result;
    }</code>

Auf dem Rückweg, also für die Entschlüsselung, kann folgender Code verwendet werden:

<code>    public MimeMessage decryptMessage(MimeMessage encrypted)
            throws MessagingException, Exception {
        SMIMEEnveloped message = new SMIMEEnveloped(encrypted);

        RecipientInformationStore recinfos = message.getRecipientInfos();
        Enumeration aliases = this.keystore.aliases();
        RecipientInformation recid = null;
        String alias = null;
        while ((recid == null) && aliases.hasMoreElements()) {
            alias = aliases.nextElement();
            if (this.keystore.isKeyEntry(alias)) {
                recid = recinfos.get(new JceKeyTransRecipientId(
                        (X509Certificate) this.keystore.getCertificate(alias)));
            }
        }
        if (recid == null) {
            throw new RuntimeException("No decryption key found");
        }

        JceKeyTransEnvelopedRecipient recipient = new JceKeyTransEnvelopedRecipient(
                (PrivateKey) this.keystore.getKey(alias, "changeit"
                        .toCharArray()));

        byte[] content = recid.getContent(recipient);

        MimeMessage decrypted = new MimeMessage(Session
                .getDefaultInstance(System.getProperties()),
                new ByteArrayInputStream(content));
        decrypted.saveChanges();
        return decrypted;
    }</code>

Ein komplettes Codebeispiel für die BouncyCastle 1.46
S/MIME-Funktionalität befindet sich in diesem Zip-Archiv.

Nachtrag: Die kompletten Zertifikate sind in verschlüsselten Nachrichten nicht enthalten. BouncyCastle packt die Empfängerinformationen in RecipientInformation-Instanzen. Mit folgendem Codefragment kann man diese Informationen ausgeben lassen:

public MimeMessage decryptMessage(final MimeMessage encrypted)
        throws MessagingException, Exception {
    SMIMEEnveloped message = new SMIMEEnveloped(encrypted);
    RecipientInformationStore recinfos = message.getRecipientInfos();
    printRecInfos(recinfos);
    ...

private void printRecInfos(final RecipientInformationStore recinfos) {
    for (Object info : recinfos.getRecipients()) {
        if (info instanceof RecipientInformation) {
            System.out.println(((RecipientInformation) info).getRID());
        }
    }
}

Diese Webseite basiert auf Wordpress. © 2014 Communardo Software GmbH / Kleiststraße 10 a / D-01129 Dresden / Fon +49 (0) 351/8 33 82-0 / info@communardo.de