openSSL echo hatası verirse

SSL’in Open SSL olabiliyor olması windows kullanıcıları açısından pek de iyi olmamış. Zira çoğu durum ya da çoğu program windowsa göre değil Linux’e göre düzenlenmiş ve anlatılmış.

Böyle bir durumda Arama-Bulma Kabiliyeti diye bir şey varsa,
(-ki bence var; ve aranacak terimleri değil, çıkacak sayfada cevap için geçmesi beklenen olası terimleri gogıllamakla gelişen bir kabileyet. tabi yanında zaman aralığı, site: title: eksi- vb.. araçlarla kombin yapmak da buna dahil-)

bu kabileyeti hakkını vererek kullanmak gerekiyor.


Önceki yazılar: HttpS openSSL NodeJS Windows, SSL Sertifikacı Sertaç’a Güven(dir)mek, Görsel


İkinci yazıdaki pek çok şey olduktan sonra ya da ilk bazı da ilk adımlar gerçeleşip sonrakiler gerçekleşmediğinde

subjectAltName = @alt_names

[alt_names]

ile ilgili sorun yaşıyor olabilirsiniz.

Ve genelde konsoldan openSSL komutları verirlen “echo” hatasıyla birlikte kendini gösterebilir.

Bu durumda komut satırına yazılacak komutları da çok uzatmayacak şekilde v3.ext dosyası oluşturmak belki çözüm olabilir.

Bi text editörü açıp içine şunları yazın ve v3.ext adıyla kayıt edin.

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = localhost

Ardından cmd konsolda şunları yazıp enterlayın;

openssl req -new -sha256 -nodes -out server.csr -newkey rsa:2048 -keyout server.key -config cat server.csr.cnf

 

Sıra geldi az localhost için yukarıda kayıt etmiş olduğumuz v3.ext dosyasını belirerej server.crt dosyasını oluşturmaya. Bunun için yine konsolda şu kodları yazalım:

server.crtopenssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 500 -sha256 -extfile v3.ext

Önceki adımlarda girdiğimiz şifreyi istedikten sonra .crt dosyamız hazır olacak.
yani localhostumuza özel sertifika dosyamız.


Yey!.

Dosyamız var tamam da, webden istek gelen portları dinleyen programımıza da bunu söyleyelim ki,
kullanıcının tarayıcısına bunu bildirsin, karşılıklı doğrulama yapılsın ve Yeşil Kilit simgesi çıksın 😉

// Tabi bu genel mantık olarak, güvenli bir şeyler yapmaya çalıştığımız için küçük de olsa bazı nüsanslarda hata çıkması gayet olası.

var fs = require('fs')
var https = require('https')
var express = require('express')
var cOptions = {
key: fs.readFileSync('server.key'),
cert: fs.readFileSync('server.crt')
}
var app = express()
var server = https.createServer(cOptions, app).listen(443)

Bu örnekteki sunucu programımız NodeJS. O yüzden app.js ya da root için hangi ismi kullanıyorsanız o dosyaya yukarıdaki kodları eklediğinizde -ve her şey yolunda gittiyse-;

http://locolhost adresine girdiğinizde hem Kilit hem de SSL sertfikanız görünüyor olacak 😉

SSL Sertifikacı Sertaç’a Güven(dir)mek

Çocukluğu ya da gençliği, klasik telefonların doğasını merak etme zamanına denk gelenlerin bileceği üzere; Telefon sesi, maraton başlama düdüğü gibidir. Bu yüzden telefon çaldığında herkes depara çıkardı 🙂 Kısa bir süre sonra -hat ile telefon’un başka şeyler olduğu anlaşıldığında- telefon çeşitleri ve renkleri çoğaldı. Evin diğer odalarında 2. telefonlar belirmeye başladı. Ve şöyle, grup diyalogları türedi:
#Alo
+Alo, -Alo
#Selam ben Rıza
-Selam Rıza abi, ne var ne yok? +Rıza dayı selam nasılsın?
-Fulya sen kapat kızım baktım ben +Tamam anne, dayıcım görüşürüz
#Fulya’cım görüşürüz, iyi bak kendine

Bu evdeki ikinci telefon misali, dışarıdan birilerinin telgraf hatlarına dahil olduğunu düşünün. Ve.. Hacker’lığın icadı. Evet, yakın tarihteki ilk Hacker’ların işi telgraf ardından telefon hacklemekmiş.


görsel


 

Yukarıdaki konuşmaya dışarıdan birinin katılmasını istemediğimiz gibi, Bankamızın ya da Borsamızın web sitesine girerken de üçüncü kişilerin aradaki diyaloğu görmesini istemeyiz. Hatta bunun öncesinde, bankamızın adresi  diye girdiğiniz yerin Gerçekten bankamızın sitesi olduğundan emin olmak isteriz.

Haliyle tarayıcıdaki adresin httpS ile başladığını görüp, iletişimin şifreli olarak gidip geldiğini,
Sertifika alıp almadığına göre de, gerçek banka ile temasta olup olmadığımızı kontrol etmemiz gerekir.


Peki, bu tür güvenli olması istenilen siteyi, siz yapıyorsanız?
Doğal olarak, ilgili kodlarınız/kütüphaneleriniz, TEST ve Geliştirme esnasında bile güvenli bağlantı gerektiriyorsa?

o halde önceki yazıdan devam edelim.

Son durumda elimizde şunlar vardı:

Test ortamımızı oluşturmak için bir nevi şunu yapacağız. RapidSSL, GeoTrust ya da Comodo gibi şirketlerin yanına biz de “Sertifikacı Sertaç Ltd.” yi kurmuşuz da biz de sertifika veriyor gibi bir sertifika üreteceğiz. Ve pc’ye/tarayıcıya, Sertaç’ın sertifikasına güven diyeceğiz.

Bunun için rootSSL.pem doyasını yönetim konsoluna tanıtacağız.

Adımlarımız şöyle;

başlat > mmc > enter

Konsol ekranı açılacak

 

Dosya > Ek bileşen ekle kaldır >

Listeden Sertifikalar > Ekle

Bilgisayar hesabı > ileri >

Yerel bilgisayar > Son

Bu işlemin ardından Sağ bölmedeki Konsol Kökü listesi altına
Sertifikalar (YerelBilgisayar)
gelmiş olmalı. Öyle iste Tamam’a tıklayalım.

Solda sadece +Sertifikalar (Yerel Bilgisayar) yazıyorsa, başındaki artı + işaretine basarak genişletelim.
Ardından Güvenilir Yayımcılar > sağ tık > Tüm görevler > Al..

Sihirbaz(?) başlayacak..
dosyamızın yerini göstermemiz lazım.

Dikkat! Gözat.. a tıkladığımızda, varsayılan olarak gelen türler .cer ve .crt bu yüzden önce Tüm Dosyalar’ı seçelim

Ve projemizin olduğu klasöre gidip, rootSSL.pem dosyasını seçelim.

Tamam/Aç’a tıklayıp, ardından İleri >

Tüm Sertifikaları aşağıdaki depolama alanına yerleştir:
Güvenilir Yayımcılar
İleri >

 

Son

~”Sertifika Alma Başarılı” mesajını görmemiz lazım.
Öyle ise, ne mutlu 😉 Sonraki yazıda görüşüz..
Değilse.. Start pain! pardon, start again 🙂

HttpS openSSL NodeJS Windows

Çok sevdiğiniz bir arkadaşınız var diyelim. Onu görmek için bir şeyleri bahane edip şehirler arası ya da ülkeler arası  yolculuklar yapabilirsiniz. Hatta hafta içi bir günde Çatalca’dan Pendik’e gitmeyi bile göze alabilirsiniz o derece.

Lakin arkadaşınızın ailesi çok ters kafa insanlar. “Keşke.. ” caps’lerine kapacak olacak cinsten.

Yeğenimle çok keyifli bir şeyler için uğraşıyoruz. Fakat uğraştığımız şey caps’lik aile birlikte paket olarak geliyor: Malesef NodeJS gerektiriyor.

“Ne var canım bunda, internet diye bir şey var. Öğrenmeyi bilen herkes biraz gayretle yeni bir programla dili de öğrenir Japonca da öğrenir..” denilebilir. Evet öyle ama öğrenmeye çalıştığınız dil de kelimeler ve cümleler farklı olsa tamam ama ya zaman algısı farklı ise..

tomorrow demekle now demek aynı kapıya çıkıyorsa?

Zaman kavramı karışınca  işlerin nasıl karıştığına bi örnek daha vereyim;

Soğanlar pembeleştikten SONRA, içinden 100’den GERİYE doğru say sıfıra GELİNCE, ÖNCE tarhanayı koy SONRA 2 bardak su ilave et.

Şimdi yeniden sorayım; tomorrow demekle now demek aynı kapıya çıkıyorsa, Tarhana çorbasını Nasıl yaparsınız?


Çoğu Normal dilde 26. adımdaki işlem, 26. adımda gerçekleşirken NodeJS’de bu yok. O yüzden sıralı bir şeylere ihtiyacınız varsa -ki %98 böyle- sürekli iç-içe-iç-içe-iç-içe-iç-içe fonksiyonlar kullanmalısınız.

Böyle bir ortamda iken bir de SSL+HttpS+NodeJS üçlüsünün çalışması için gibi bir internetteki kaynakların %90’nın Linux’a göre anlatım yaptığını sizin de Windows sunucuda çalıştığınızı düşünün..

 

 


Notlar:

–NodeJS indir kur

–Windows için -32/64bite göre-,  “openssl windows 32bit” tarzı aramalar yaparak openSSL’in güncel versiyonunu indir.

–Kurulum olduğu klasörde C:\OpenSSL-Win32\ bulunan dosyalar arasında \bin\ klasörü içinde
openssl.cfg ya da openssl.cnf dosyası bulunduğundan emin ol. Yoksa başka kaynaklardan yeniden indir.

–OpenSSL’in yer konum altından çalışabilmesi için, Ortam değişkenlerine PATH ekle.
Bilgisayarım > sağtık > özellikler > gelişmiş > Ortam değişkenleri > Sistem değişkenleri > Path > Düzenle
Satır sonuna ;C:\OpenSSL-Win32\  ekle.

–ilgili proje klasörüne Shift+Sağtık > Komut penceresini burada aç, diyerek konsolu aç

–RootSSL.key oluşturmak için şunu yaz
openssl genrsa -des3 -out rootSSL.key 2048

Sonrasında şifre soracak, iki defa şifre gir.

bu işlemin sonunda ilgili klasörde rootSSL.key dosyası oluşmuş olacak.

Bunun içinde az önce üretmiş olduğumuz Özel Anahtar bulunuyor olacak.

 

–Şimdi bu özel anahtarı kullanarak rootSSL.pem dosyası üretelim.

openssl req -x509 -new -nodes -key rootSSL.key -sha256 -days 1024 -out rootSSL.pem

ve pem dosyamız oluuşş..a madı.

–Konsolda şunu yazıp bulamadığı dosyanın yerini tarif edelim:
SET OPENSSL_CONF=C:\OpenSSL-Win32\bin\openssl.cfg

Sessizce ve tepkisizce çalışmış olmalı.

–Bir üstteki .pem üretme kodumuzu yeniden deneyelim:

–Common Name kısmında server/domain adı yerine localhost girilebilir.

Böylece klasörümüzde şu dosyalar mevcut olacak.

 

Macera ne yazık ki buradaki tıkır tıkır işlemeyebilir. Zira netteki hiç bir tutorial bana uymadı. Olayın mantığını kavrayıp; ne lazım ve bunun için nerede ne yapılması gerekiyor buna göre işlemleri yapmak en sağlıklısı.

–devam edecek–
görsel