Syslogs

Linux/Unix ve Acık Kod uygulamalar uzerine dokumanlar, ipuclari, gelistirmeler ve fazlasi…

Ana Sayfa » *nix » openSSL ve TSA ile Otomatik Log Imzalayıcı (Shell) Script

openSSL ve TSA ile Otomatik Log Imzalayıcı (Shell) Script

Daha önce bir yazımda openSSL kullanarak 5651 sayılı kanunun gerektirdiği şekilde log dosyalarını zaman damgası ile imzalama işlerinin nasıl yapılacağını anlatan bir konuya değinmiştim. Bildiğiniz gibi openSSL’i TSA patch’i ile derleyerek logları formal olarak zaman damgası ile imzalamak mümkün. shell

openSSL ile log imzalama işlemi güzel de, bu iş için manuel olarak bir takım komutlar vermeniz gerekiyor. Ancak log imzalama işleri periyodik olarak yapılması gereken bir prosedür olduğundan dolayı her seferinde bu komutları manuel olarak vermek ciddi bir külfet oluyor. İşte bu nedenle, imzalama işlerini otomatik olarak yapmak üzere crondan çalıştırılabilecek, aşağıdaki linklerden download edebileceğiniz bir shell script yazdım.

Scripti kullanabilmek için, sisteminizde TSA patch’i geçilmiş bir openSSL sürümü olması gerekir. Bu işi nasıl yapabileceğiniz ile ilgili bir dökümana http://www.syslogs.org/2009/08/openssl-ile-5651-sayili-kanun-geregi-log-imzalamak/ adresinden erişebilirsiniz.

Ayrıca, scriptin aşağıdaki linklerden erişebileceğiniz FreeBSD ve CentOS uyumlu olmak üzere iki farklı versiyonu bulunuyor.

Betiğin yaptığı işlemler sırası ile şöyle:

  1. İmzalama işleri için kullanılmak üzere belirlediğiniz dizin (mevcut değilse) oluşturuluyor.
  2. Log dosyası Çalışma dizinine kopyalanıyor.
  3. openSSL ve TSA kullanılacak imzalama işlemiyapılıyor.
  4. İmza işlerinden sonra, imzalı log dosyası doğrulanıyor.
    • İmza doğrulaması başarılı olursa, imzalanan dosyalar dosyaadi-tarih.tar.gz ismiyle
      paketlenip saklama dizinine taşınıyor. Son olarak çalışma dizinindeki işi bitmiş dosyalar siliniyor.
    • İmza doğrulaması başarısız olursa, hatalı imzalanmış olan dosyalar hatali-imza.tarih
      isimli dizine taşınıyor ve belirttiginiz e-posta adresine bir mail gönderiliyor.

Download

FreeBSD: http://www.syslogs.org/getfile/openssl-log-imzalayici-BSD.sh
CentOS:  http://www.syslogs.org/getfile/openssl-log-imzalayici-CNT.sh

İçerik

Hızlıca göz atmak isterseniz, içeriği de şu şekildedir:

FreeBSD

Shell Çıktısı
#!/bin/sh
 
# DEGISKENLER
 
# Imzali dosyalara ait tar.gz dosyasinin ismine eklenecek zaman bilgisi.
tarih=`date "+%Y%m%d-%H%M%S"`
 
# Imza islemi icin calisma dizinine kopyalanacak log dosyasinin adi.
dosya_adi=messages
 
# Log dosyasinin bulundugu dizin.
yol=/var/log
 
# Imzalama islerinin yapilacagi dizinin adi.
calisma_dizini=/var/imza_isleri
 
# Imza sonrasi olusan dosyalarin backuplanacagi dizin.
saklama_dizini=/var/imzali_loglar
 
#Hatali imzalanmis dosyalarin tasinacagi dizin.
hatali_imzalar=/var/imzali_loglar/hatali-imza-$dosya_adi-$tarih
 
# Imzalama sirasinda kullanilan CA private key'e ait public key.
CAPublicKEY=/CA/cacert.pem
 
# Zaman damgasi otoritesine ait public key.
TSAPublicKEY=/CA/tsacert.pem
 
# Imzalama sirasinda kullanilan TSA private key'e ait public key.
openssl=/usr/local/ssl/bin/openssl
 
# Imza islemi icin kullanilacak openssl binarysi.
openssl_conf=/usr/local/ssl/openssl.cnf # OpenSSL binary'sinin kullanacagi config dosyasi.
 
# TSA'ya ait Private Key'in Pass Pharse'i
password=parolaniz
 
# Hata durumunda gonderilecek bildirim maili'nin gidecegi posta adresinizi girin.
eposta_adresi=eposta-adresiniz
 
#--------------------------------------CALISMA DIZININE KOPYALAMA ISLEMI--------------------------------------#
 
    if [ ! -d $calisma_dizini ]
 
        then
 
                        mkdir $calisma_dizini
 
        fi
 
sleep 1
 
                        cp $yol/$dosya_adi $calisma_dizini
 
                cd $calisma_dizini
 
#--------------------------------------IMZALAMA ISLEMI--------------------------------------#
 
            $openssl ts -query -data $dosya_adi -no_nonce -out $dosya_adi.tsq
sleep 1
            $openssl ts -reply -queryfile $dosya_adi.tsq -out $dosya_adi.der -token_out -config $openssl_conf -passin pass:$password
 
#--------------------------------------DOGRULAMA ISLEMI--------------------------------------#
 
COMMAND=`$openssl ts -verify -data $dosya_adi -in $dosya_adi.der -token_in -CAfile  $CAPublicKEY -untrusted $TSAPublicKEY`
 
if [ "${COMMAND}" = "Verification: OK" ]
 
        then
 
                echo "Dogrulama tamam."
 
        else
 
                echo "Dogrulama Saglanamadi. Islemler geri aliniyor."
 
                        if [ ! -d $saklama_dizini ]
 
                        then
 
                        mkdir $saklama_dizini
 
                        fi
 
                                if [ ! -d $hatali_imzalar ]
 
                                then
 
                                mkdir $hatali_imzalar
 
                                fi
 
                                mv $calisma_dizini/$dosya_adi* $hatali_imzalar
 
                                echo "$dosya_adi isimli log dosyasi imzalamanamadi.
Imza islemi geri alinmis durumda. Hatali dosyalari $hatali_imzalar dizininde bulabilirsiniz. Problemin nedenini gormek icin scripti manuel olarak calistirabilirsiniz." | mail -s "Log Imzalayici" "$eposta_adresi"
 
                                exit
fi
 
sleep 1 
 
        if [ ! -d $saklama_dizini ]
 
        then
 
                        mkdir $saklama_dizini
 
        fi
 
sleep 1
 
                        tar cvfz $saklama_dizini/$dosya_adi.$tarih.tar.gz $dosya_adi*
 
sleep 1
 
                        rm  $calisma_dizini/$dosya_adi*

CentOS

Shell Çıktısı
#!/bin/sh
 
# DEGISKENLER
 
# Imzali dosyalara ait tar.gz dosyasinin ismine eklenecek zaman bilgisi.
tarih=`date "+%Y%m%d-%H%M%S"`           
 
# Imza islemi icin calisma dizinine kopyalanacak log dosyasinin adi.
dosya_adi=messages                      
 
# Log dosyasinin bulundugu dizin.
yol=/var/log
 
# Imzalama islerinin yapilacagi dizinin adi.
calisma_dizini=/var/imza_isleri
 
# Imza sonrasi olusan dosyalarin backuplanacagi dizin.
saklama_dizini=/var/imzali_loglar
 
#Hatali imzalanmis dosyalarin tasinacagi dizin.
hatali_imzalar=/var/imzali_loglar/hatali-imza-$dosya_adi-$tarih
 
# Imzalama sirasinda kullanilan CA private key'e ait public key.
CAPublicKEY=/CA/cacert.pem
 
# Zaman damgasi otoritesine ait public key.
TSAPublicKEY=/CA/tsacert.pem
 
# Imzalama sirasinda kullanilan TSA private key'e ait public key.
openssl=/usr/local/ssl/bin/openssl
 
# Imza islemi icin kullanilacak openssl binarysi.
openssl_conf=/usr/local/ssl/openssl.cnf # OpenSSL binary'sinin kullanacagi config dosyasi.
 
# TSA'ya ait Private Key'in Pass Pharse'i
password=parolaniz
 
# Hata durumunda gonderilecek bildirim maili'nin gidecegi posta adresinizi girin.
eposta_adresi=posta-adresiniz
 
#--------------------------------------CALISMA DIZININE KOPYALAMA ISLEMI--------------------------------------#
 
    if [ ! -d $calisma_dizini ]
 
        then
 
                        mkdir $calisma_dizini
 
        fi
 
sleep 1
 
                        cp $yol/$dosya_adi $calisma_dizini
 
                cd $calisma_dizini
 
#--------------------------------------IMZALAMA ISLEMI--------------------------------------#
 
            $openssl ts -query -data $dosya_adi -no_nonce -out $dosya_adi.tsq
sleep 1
            $openssl ts -reply -queryfile $dosya_adi.tsq -out $dosya_adi.der -token_out -config $openssl_conf -passin pass:$password
 
#--------------------------------------DOGRULAMA ISLEMI--------------------------------------#
 
COMMAND=`$openssl ts -verify -data $dosya_adi -in $dosya_adi.der -token_in -CAfile  $CAPublicKEY -untrusted $TSAPublicKEY`
 
if [ "$COMMAND" == "Verification: OK" ]
 
        then
 
                echo "Dogrulama tamam."
 
        else
 
                echo "Dogrulama Saglanamadi. Islemler geri aliniyor."
 
                        if [ ! -d $saklama_dizini ]
 
                        then
 
                        mkdir $saklama_dizini
 
                        fi
 
                            if [ ! -d $hatali_imzalar ]
 
                                                        then
                                                                mkdir $hatali_imzalar
                                                        fi
 
                                mv $calisma_dizini/$dosya_adi* $hatali_imzalar
 
echo "$dosya_adi isimli log dosyasi imzalanamadi.
Imza islemi geri alinmis durumda.
Hatali dosyalari $hatali_imzalar dizininde bulabilirsiniz.
Problemin nedenini gormek icin scripti manuel olarak calistirabilirsiniz." | mail -s "Log Imzalayici" "$eposta_adresi"
 
                                exit
fi
 
sleep 1 
 
        if [ ! -d $saklama_dizini ]
 
        then
 
                        mkdir $saklama_dizini
 
        fi
 
sleep 1
 
                        tar cvfz $saklama_dizini/$dosya_adi.$tarih.tar.gz $dosya_adi*
 
sleep 1
 
                        rm  $calisma_dizini/$dosya_adi*

Scripti daha fazla geliştirmek mümkün, ihtiyaçlarınıza göre düzenlemeleri yaptıktan sonra kullanabilirsiniz. Umarım işinize yarar.

Tags: , ,

Belki şu konular da ilginizi çeker:


Kategori: *nix, ipucu | |

YORUMLAR


  1. Halid | (Ekim 10th, 2009 11:22 pm)

    Harika olmuş :) Teşekkürler.

    [Cevapla]

  2. Alparslan | (Ekim 15th, 2009 9:18 am)

    Merhaba,

    birinci sorum; imzalama işleminde kullanılan TSA için özel/genel anahtarlar akıllı kartta kullanılmak isterse ne yapılması gerekir.

    ikincisi; TSA için alınan sertifika başka bir CA altındaysa yani CA sertifikası zincir şeklindeyse burada nasıl yazılabilir.

    KURUM ROOT CA
    KURUM SUBCA
    TSA

    [Cevapla]

    Cagri Ersen tarafından yanıtlandı.

    Merhaba,

    Her iki soru icin de, enine boyuna test etmedim ama konu imzalama isleminin dogru anahtarlarla yapilmasi oldugundan dolayi hangi mecralarda kullanildigi ile ilgili bir sıkıntı yasamamalisiniz.

    Ama bu net cevap degildir, cunku dedigim gibi ihtiyacim disinda kalan sekillerde denemeler yapmadim.

    [Cevapla]

  3. Alparslan | (Ekim 15th, 2009 9:21 am)

    Merhaba, ek olarak bu signserver uygulaması bu imzalama scriptiyle karşılaştırılabilirmisiniz?

    signserver.org

    tşk.

    [Cevapla]

    Cagri Ersen tarafından yanıtlandı.

    Bu konuda da verebilecek net bir yanitim yok, cunku hic incelemedim signserver uygulamasini.

    [Cevapla]

  4. metin | (Şubat 3rd, 2010 9:22 am)

    Selamlar.

    Debian Etch ile bir önceki manuel log imzala işlerini hallettim.
    Acaba yukarıdaki hangi script sürekli olarak log imzalama işimi görür. ?

    Teşekkürler iyi çalışmalar.

    [Cevapla]

    Cagri Ersen tarafından yanıtlandı.

    Merhaba,

    CentOS versiyonunu kullanabilirsiniz, hata alırsanız durumu burada paylasirsaniz cozumunu de bulabiliriz.

    [Cevapla]

    metin tarafından yanıtlandı.

    Selamlar.

    Evet. Centos versiyonu ile sorunsuz çalıştı. Teşekkürler…

    [Cevapla]

Trackbacks

Yorumda bulunun.