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. |
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:
- İmzalama işleri için kullanılmak üzere belirlediğiniz dizin (mevcut değilse) oluşturuluyor.
- Log dosyası Çalışma dizinine kopyalanıyor.
- openSSL ve TSA kullanılacak imzalama işlemiyapılıyor.
- İ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.
- İmza doğrulaması başarılı olursa, imzalanan dosyalar dosyaadi-tarih.tar.gz ismiyle
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
#!/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
#!/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: openssl, timestamp, tipsBelki şu konular da ilginizi çeker:
YORUMLAR
Trackbacks
Yorumda bulunun.



Harika olmuş :) Teşekkürler.
[Cevapla]
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]
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]
Merhaba, ek olarak bu signserver uygulaması bu imzalama scriptiyle karşılaştırılabilirmisiniz?
signserver.org
tşk.
[Cevapla]
Bu konuda da verebilecek net bir yanitim yok, cunku hic incelemedim signserver uygulamasini.
[Cevapla]
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]
Merhaba,
CentOS versiyonunu kullanabilirsiniz, hata alırsanız durumu burada paylasirsaniz cozumunu de bulabiliriz.
[Cevapla]
Selamlar.
Evet. Centos versiyonu ile sorunsuz çalıştı. Teşekkürler…
[Cevapla]