OpenSSL, TLS Protokolü ve Kamu Anahtarı Altyapısı sistemlerinde kullanılan çeşitli komutları içeren açık kaynaklı bir kriptografi kütüphanesidir. OpenSSL 1998 yılında piyasaya sürülmüştür ve Windows, Linux, macOS ve BSD sistemleri için mevcuttur. OpenSSL komutu, Sertifika İmzalama Talebi (CSR), özel anahtar oluşturma ve SSL sertifikasyonu dahil olmak üzere çeşitli görevleri gerçekleştirmenize yardımcı olacaktır.
OpenSSL önemlidir çünkü SSL'in düzgün bir şekilde uygulanmasını sağlar. SSL'i doğru şekilde edinmek, web sitenizin güvenliği için çok önemlidir. Dahası, önde gelen bir arama motoru olan Google, SSL sertifikası uygulanmış web sitelerine öncelik vermektedir. Chrome ve Firefox gibi bazı tarayıcılar, uygun bir SSL sertifikanız yoksa web sitenizi Güvenli Değil olarak işaretleyebilir. Bu nedenle, web sitenizin trafiğini şifrelenmiş HTTPS protokolü üzerinden sunmak son derece önemlidir.
Her Şeyden Önce
Bu eğitim, günlük senaryolarda kullanabileceğiniz OpenSSL komutlarının bazılarını (ancak muhtemelen hepsini değil) içeren kopya kağıdı (cheat sheet) tarzında bir kılavuzdur.
İlk bölüm, Sertifika İmzalama Talepleri (CSR) hakkında bilmeniz gereken her şeyi açıklamaktadır. Ancak, konuya zaten aşinaysanız, ulaşmaya çalıştığınız hedefle ilgili diğer bölümlere geçebilirsiniz. Her bölüm, alt başlıkta belirtilen işlemi gerçekleştirmek için bir komut satırı parçacığı içerir.
Hadi başlayalım!
Bölüm 1: Sertifika İmzalama Taleplerini (CSR) Anlamak
Sertifika imzalama talebi, bir sertifika yetkilisinden (CA) SSL sertifikası alırken bir ön koşuldur. CSR, bir anahtar çiftinin genel anahtarını ve bazı ek bilgileri içerir. İmzalama işlemi sırasında bunları sertifikaya eklemeniz gerekir.
CSR oluşturma sırasında, Ayırt Edici Ad (DN) olarak bilinen tanımlayıcı bilgileri sağlamanız istenir. DN, sertifikayı kullanacak ana bilgisayarın tam Alan Adı (FQDN) olan Ortak Ad (CN) gibi sertifika için gerekli alanları içerir. DN'nin diğer alanları; ülke, eyalet, bölge adı ve işletmenize özel sertifikalar oluşturuyorsanız kuruluş veya işletme adı gibi ek bilgiler içindir. Bilgileri bir dosyadan veya komut satırı üzerinden sağlayarak bu istemleri atlamayı seçebilirsiniz.
Aşağıdaki ekran görüntüsünde yer alan CSR bilgi istemi örneğine göz atın:
|
1 2 3 4 5 6 7 |
Ülke Adı (2 harf kodu) [AU]:CH Eyalet veya İl Adı (tam ad) [Bazı-Eyalet]:Züürih Bölge Adı (örneğin, şehir) []:Eski Şehir Kuruluş Adı (örneğin, şirket) [İnternet Widgits Pty Ltd]:Örnek Cloudsigma Şirketi Kurumsal Birim Adı (örneğin, bölüm) []:Bulut Teknolojisi Ortak Ad (ö.r. sunucu FQDN veya SİZİN adınız) []:cloudsigma.com E-posta Adresi []:info@cloudsigma.com |
Aşağıda gösterildiği gibi -subj bayrağını ekleyerek ve alanların bilgilerini sağlayarak istemlerden kaçınmak için bilgileri tek satırlık bir komutla sağlayabilirsiniz:
|
1 |
-subj "/C=CH/ST=Zürich/L=Old Town/O=Example Cloudsigma Company/CN=cloudsigma.com" |
Yukarıdaki komut, CSR bilgi istemlerinin kod bloğu örneğinde görüntülenen bilgilerin aynısını alır.
Bölüm 2: Sertifika İmzalama Talepleri Oluşturma
Bu bölümde, CSR ve özel anahtarlar oluşturmak için kullanabileceğiniz OpenSSL komutlarını ele alacağız. CSR'ler, bir Sertifika Yetkilisinden (CA) SSL sertifikası talep etmek için gereklidir.
Özel Anahtar ve Sertifika İmzalama Talebi Oluşturma
Bir Sertifika Yetkilisinin, Apache veya Nginx sunucunuzu güvence altına almak için bir SSL sertifikası düzenlemesini istiyorsanız bu yöntemi kullanabilirsiniz. sunucunuzun trafiği HTTPS, yani TLS destekli HTTP üzerinden sunmasını sağlayabilirsiniz. Bu komutla oluşturulan CSR, CA tarafından imzalanmış bir SSL sertifikası talep etmek üzere bir CA'ya gönderilebilir. Ubuntu üzerinde Apache veya Nginx sunucularınızı nasıl kuracağınıza dair ayrıntılı kılavuzlarımızı takip edebilirsiniz.
Sıfırdan 2048 bitlik bir özel anahtar (domain.key) ve CSR (domain.csr) oluşturmak için terminalinize aşağıdaki komutu girin:
|
1 |
openssl req -newkey rsa:2048 -nodes -keyout domain.key -out domain.csr |
Soruları özel CSR bilgilerinizle yanıtlayın. İsteğe bağlı olarak, sorulardan kaçınmak için komuta -subj bayrağını ekleyebilirsiniz:
|
1 |
openssl req -newkey rsa:2048 -nodes -keyout domain.key -out domain.csr -subj "/C=CH/ST=Zürich/L=Old Town/O=Example Cloudsigma Company/CN=cloudsigma.com" |
The -newkey rsa:2048 bayrağı, anahtarın 2048 bitlik RSA algoritması kullanılarak oluşturulması gerektiğini belirtir. -nodes bayrağı, özel anahtar için parola şifrelemesi olmadığını gösterir. Dahil edilmeyen ancak yeni bir CSR'nin oluşturulduğunu gösteren bir -new seçeneği de ima edilmektedir.
Mevcut Bir Özel Anahtardan Sertifika İmzalama Talebi Oluşturma
Eğer zaten bir özel anahtarınız varsa, bir CSR oluşturmak için bu yöntemi kullanabilirsiniz. Daha sonra bunu bir CA'dan SSL sertifikası talep etmek için kullanacaksınız. Yeni bir CSR (domain.csr) oluşturmak için mevcut bir özel anahtar (domain.key):
|
1 |
openssl req -key domain.key -new -out domain.csr |
Soruları özel CSR bilgilerinizle yanıtlayın. İsteğe bağlı olarak, sorulardan kaçınmak için komuta -subj bayrağını ekleyebilirsiniz:
|
1 |
openssl req -key domain.key -new -out domain.csr -subj "/C=CH/ST=Zürich/L=Old Town/O=Example Cloudsigma Company/CN=cloudsigma.com" |
The flag -key bayrağı, yeni bir CSR oluşturmak için kullanılacak mevcut özel anahtarı (domain.key) belirtir. -new bayrağı ise yeni bir CSR oluşturulduğunu gösterir.
Mevcut Bir Sertifika ve Özel Anahtardan Sertifika İmzalama Talebi Oluşturma
Eğer bir CSR oluşturmak için kullanmak istediğiniz mevcut bir sertifikanız varsa, bu yöntemi kullanabilirsiniz. Bu yöntem, sizin veya CA'nızın orijinal CSR'yi kaybetmesi durumunda ve daha önce girilen CSR bilgilerini yeniden girmek zorunda kalmadan oluşturmanız gerektiğinde yararlı olabilir. Komut, bilgileri mevcut sertifikadan çıkarır. Terminalinizde yeni bir CSR (domain.csr) oluşturmak için mevcut bir sertifikası (domain.crt) ve mevcut bir özel anahtar (domain.key):
|
1 |
openssl x509 -in domain.crt -signkey domain.key -x509toreq -out domain.csr |
-x509toreq seçeneği, CSR'yi oluşturmak için X509 sertifikasını kullandığınızı belirtir.
Bölüm 3: SSL Sertifikaları Oluşturma
Bazı durumlarda, CA tarafından imzalanmış bir sertifika alma zahmetine girmeden bir SSL sertifikası kullanmak isteyebilirsiniz. Bu bölümde kendi sertifikalarınızı nasıl imzalayabileceğiniz açıklanmaktadır. Bu geçerli ve ücretsizdir. Bu sertifikalar kendinden imzalı sertifikalar olarak adlandırılır ve oldukça yaygındır.
Kendinden imzalı bir sertifika, kendi özel anahtarıyla imzalanır. Hem kendinden imzalı hem de CA tarafından imzalanmış sertifikalar, verileri ve web sitesi trafiğini şifrelemek için aynı derecede iyi çalışır. Ancak, kendinden imzalı sertifikalarda kullanıcılar genellikle tarayıcılarında sertifikanın güvenilir olmadığına dair bir uyarı alırlar. Bu nedenle, kendinden imzalı sertifikaları kullanıcılarla hassas bilgi alışverişinde bulunmayan web siteleri için veya üretim dışı sunucularda kullanabilirsiniz. Aşağıda, kendinden imzalı sertifikalar oluşturmak için kullanabileceğiniz OpenSSL komutlarını bulabilirsiniz.
- Kendinden İmzalı Sertifika Oluşturma
Apache veya Nginx sunucunuzu güvenli hale getirmek amacıyla bir SSL sertifikası oluşturmak için bu yöntemi kullanabilirsiniz. Bu, sertifikayı imzalatmak için bir CA'ya gitmeden trafiğin HTTPS veya TLS üzerinden HTTP ile gelmesini sağlayacaktır:
|
1 |
openssl req -newkey rsa:2048 -nodes -keyout domain.key -x509 -days 365 -out domain.crt |
İstemleri özel CSR bilgilerinizle yanıtlayın. İsteğe bağlı olarak, istemlerden kaçınmak için komuta -subj bayrağını ekleyebilirsiniz:
|
1 |
openssl req -newkey rsa:2048 -nodes -keyout domain.key -x509 -days 365 -out domain.crt -subj "/C=CH/ST=Zürich/L=Old Town/O=Example Cloudsigma Company/CN=cloudsigma.com" |
The -x509 bayrağı, kendinden imzalı bir sertifika oluşturulduğunu belirtir. -days 365 seçeneği, sertifikanın geçerli olacağı gün sayısını belirtir. Bu durumda 365 gündür. Farklı bir gün sayısı da seçebilirsiniz. Komut, sertifikayla ilişkilendirmeniz gereken bilgileri tutmak için geçici bir CSR oluşturur.
- Mevcut Bir Özel Anahtardan Kendinden İmzalı Sertifika Oluşturma
Bu yöntem, halihazırda mevcut olan özel anahtarınızdan kendinden imzalı bir sertifika oluşturmanıza yardımcı olacaktır. Kendinden imzalı bir sertifika (domain.crt) oluşturmak üzere, şu mevcut özel anahtarı kullanmak için aşağıdaki komutu girin: (domain.key):
|
1 |
openssl req -key domain.key -new -x509 -days 365 -out domain.crt |
İstemlere özel CSR bilgilerinizi girin. İsteğe bağlı olarak, istemlerden kaçınmak için komuta -subj bayrağını ekleyebilirsiniz:
|
1 |
openssl req -key domain.key -new -x509 -days 365 -out domain.crt -subj "/C=CH/ST=Zürich/L=Old Town/O=Example Cloudsigma Company/CN=cloudsigma.com" |
The -x509 bayrağı, kendinden imzalı bir sertifika oluşturulduğunu belirtir. -days 365 seçeneği, sertifikanın geçerli olacağı gün sayısını belirtir. Bu durumda 365 gündür. Farklı bir gün sayısı da seçebilirsiniz. -new seçeneği, CSR bilgi istemini başlatır.
Bölüm 4: Sertifikaları Görüntüleme
Sertifikalar ve CSR dosyaları kodlanır ve .pem uzantısıyla saklanır. Bu uzantı, Gizliliği Artırılmış Posta (Privacy-Enhanced Mail) anlamına gelir. Kriptografik anahtarları, sertifikaları ve diğer kritik verileri depolamak ve göndermek için kullanılan bir dosya biçimidir. PEM dosyaları insanlar tarafından kolayca okunamaz. Bu bölümde, kodlanmış PEM dosyalarındaki girdileri görüntülemek için kullanabileceğiniz komutları bulacaksınız.
- CSR Dosyalarını Görüntüleme
Bir CSR'nin (domain.csr) içeriğini terminalinizde görüntülemek ve doğrulamak için aşağıdaki komutu girin:
|
1 |
openssl req -text -noout -verify -in domain.csr |
Örneğin, yukarıdaki komut şuna benzer bir çıktı verebilir:

- Sertifika Girdilerini Görüntüleme
Bir sertifikanın içeriğini görüntülemek için aşağıdaki komutu girin: (domain.crt):
|
1 |
openssl x509 -text -noout -in domain.crt |
Yukarıdaki komut şuna benzer bir çıktı verebilir:

- Bir Sertifikanın Bir Sertifika Yetkilisi Tarafından İmzalandığını Doğrulama
Bir sertifikanın (domain.crt) belirli bir CA sertifikası (ca.crt) tarafından imzalanıp imzalanmadığını doğrulamak için aşağıdaki komutu girin:
|
1 |
openssl verify -verbose -CAfile ca.crt domain.crt |
Bölüm 5: Özel Anahtarlar
Özel anahtarlar oluşturmak ve doğrulamak için gerekli OpenSSL komutlarını arıyorsanız, bu bölüm tam size göre.
- Özel Anahtar Oluşturma
Şifre korumalı 2048 bitlik bir özel anahtar (domain.key) oluşturmak için terminalinize aşağıdaki komutu girin:
|
1 |
openssl genrsa -des3 -out domain.key 2048 |
Komut, işlemi tamamlamak için sizden bir şifre isteyecektir. Aşağıdaki ekran görüntüsüne bakın:

- Özel Anahtarı Doğrulama
Bir özel anahtarın (domain.key) geçerliliğini doğrulamak için terminalinize aşağıdaki komutu girin:
|
1 |
openssl rsa -check -in domain.key |
Ardından, bir şifre girmeniz gerekecektir. Özel anahtar şifrelenmişse ve doğru parolayı girerseniz, şifrelenmemiş anahtar terminalde görüntülenecektir. Aşağıdaki ekran görüntüsüne bakın:

- Bir Özel Anahtarın bir Sertifika ve CSR ile Eşleştiğini Doğrulama
Bir özel anahtarın (domain.key) bir sertifika (domain.crt) ve bir CSR (domain.csr) ile eşleşip eşleşmediğini kontrol etmek istiyorsanız, terminalinize aşağıdaki komutları girin:
|
1 2 3 |
openssl rsa -noout -modulus -in domain.key | openssl md5 openssl x509 -noout -modulus -in domain.crt | openssl md5 openssl req -noout -modulus -in domain.csr | openssl md5 |
Yukarıdaki komutların çıktısının aynı olduğunu fark ederseniz, özel anahtar, sertifika ve CSR'nin birbiriyle ilişkili olması muhtemeldir.
- Bir Özel Anahtarı Şifreleme
Şifrelenmemiş bir özel anahtarınız varsa (unencrypted.key) ve anahtarın şifrelenmiş sürümünü elde etmek istiyorsanız (encrypted.key), terminalinize aşağıdaki komutu girin:
|
1 |
openssl rsa -des3 -in unencrypted.key -out encrypted.key |
Komut, özel anahtarı şifrelemek için sizden bir parola isteyecektir.
- Bir Özel Anahtarın Şifresini Çözme
Şifrelenmiş bir özel anahtarınız varsa (encrypted.key) ve bunun şifresi çözülmüş sürümünü elde etmek istiyorsanız (decrypted.key), terminalinize aşağıdaki komutu girin:
|
1 |
openssl rsa -in encrypted.key -out decrypted.key |
Komut, şifrelenmiş anahtar için sizden bir parola isteyecektir. Doğru parolayı girerseniz şifre çözülecektir. Çıktı şuraya kaydedilecektir: decrypted.key.
Bölüm 6: Sertifika Formatlarını Dönüştürme
Şimdiye kadar ASCII PEM ile kodlanmış X.509 sertifikalarıyla çalıştığımızı fark etmiş olabilirsiniz. Bu durum sorun yaratmasa da, kullanabileceğiniz çeşitli başka sertifika kodlama ve kapsayıcı türleri de mevcuttur. Bazı uygulamalarda, belirli formatları diğerlerine tercih edebilirsiniz. Dahası, bazı farklı formatlar özel anahtar, CSR ve CA tarafından imzalanmış sertifika gibi birden fazla öğeyi tek bir dosyada barındırabilir. Çeşitli sertifika formatları arasında dönüştürme yapmak için OpenSSL'i de kullanabilirsiniz. Sertifika formatı dönüştürme işlemine yönelik bazı OpenSSL komutları için okumaya devam edin.
- PEM'i DER'e Dönüştürme
DER (Distinguished Encoding Rules), X.509 sertifikaları ve özel anahtarlar için ikili (binary) bir kodlamadır. PEM kodlu bir sertifikayı (domain.crt) DER kodlu bir sertifikaya (domain.der), dönüştürmek için aşağıdaki komutu girin:
|
1 |
openssl x509 -in domain.crt -outform der -out domain.der |
DER kodlama formatının çoğu kullanım alanını Java programlama dilinde bulabilirsiniz. Ubuntu sunucunuzda Java'yı hızlıca kurmak için bu öğreticiyi takip edin.
- DER'i PEM'e Dönüştürme
DER kodlu bir sertifikayı (domain.der) bir PEM sertifikasına (domain.crt), dönüştürmek için aşağıdaki komutu girin:
|
1 |
openssl x509 -inform der -in domain.der -out domain.crt<code> |
- PEM'i PKCS7'ye Dönüştürme
Örneğin, domain.crt ve ca-chain.crt PEM sertifikalarını bir PKCS7 dosyasına (domain.p7b) eklemek isteyebilirsiniz. Bunu gerçekleştirmek için gereken komut şudur:
|
1 |
openssl crl2pkcs7 -nocrl -certfile domain.crt -certfile ca-chain.crt -out domain.p7b |
PKCS7 dosyasına eklenecek sertifikaları belirtmek için -certfile seçeneğini birden fazla kez kullanabilirsiniz. PKCS7 dosyaları çoğunlukla Java Key Store'lar ve Microsoft IIS ile ilgilidir. P7B dosyaları olarak da bilinen bu dosyalar, sertifikaları ve CA tarafından imzalanmış sertifikaları içerebilen ASCII dosyalarıdır.
- Convert PKCS7 to PEM
Bir PKCS7 dosyasını (domain.p7b) PEM kodlu bir dosyaya (domain.crt), dönüştürmek için terminalinize aşağıdaki komutu girin:
|
1 |
openssl pkcs7 -in domain.p7b -print_certs -out domain.crt |
- PEM'i PKCS12'ye Dönüştürme
Bir özel anahtarı (domain.key) ve bir sertifikayı (domain.crt) bir PKCS12 dosyası (domain.pfx), aşağıdaki komutu girin:
|
1 |
openssl pkcs12 -inkey domain.key -in domain.crt -export -out domain.pfx |
Komut, isteğe bağlı olarak boş bırakabileceğiniz dışa aktarma şifrelerini girmenizi isteyecektir. Sertifikaları tek bir PEM dosyasında (domain.crt) birleştirerek PKCS12 dosyasına birçok sertifika bağlayabilirsiniz. PKCS12, PFX olarak da bilinir ve çoğunlukla şurada kullanılır: Microsoft IIS.
- PKCS12'yi PEM'e Dönüştürme
Bir PKCS12 dosyasını (domain.pfx) PEM kodlu bir biçime (domain.combined.crt) dönüştürmek için aşağıdaki komutu girin:
|
1 |
openssl pkcs12 -in domain.pfx -nodes -out domain.combined.crt |
Yukarıdaki komut tarafından oluşturulan PEM dosyası, PKCS12'nin barındırdığı tüm çoklu öğeleri içerir.
Bölüm 7: OpenSSL Sürümünü Kontrol Etme
Çalıştırdığınız herhangi bir yazılımın sürümü, çalıştırdığınız uygulamaların yeteneklerini etkileyebilir. Bu nedenle, sürümün belirlenmesi gerekir. Aynı durum OpenSSL için de geçerlidir. Bazı komut satırı seçenekleri bir sürümde eksik olabilir ve başka bir sürümde mevcut olabilir. Çalıştırdığınız OpenSSL sürümünü görüntülemek için aşağıdaki komutu girin:
|
1 |
openssl version -a |
Bu kılavuzu oluştururken yukarıdaki komutu çalıştırdığımızda aldığımız çıktı aşağıdadır:
|
1 2 3 4 5 6 7 8 |
OpenSSL 1.1.1i 8 Ara 2020 derlenme tarihi: Cmt Ara 19 15:39:47 2020 UTC platform: linux-x86_64 seçenekler: bn(64,64) rc4(16x,int) des(int) idea(int) blowfish(ptr) derleyici: gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -O3 -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DRC4_ASM -DMD5_ASM -DAESNI_ASM -DVPAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DX25519_ASM -DPOLY1305_ASM -DNDEBUG OPENSSLDIR: "/usr/local/ssl" ENGINESDIR: "/usr/local/lib/engines-1.1" Tohumlama kaynağı: işletim sistemi-özel |
Aşağıda gerçek ekran görüntüsünü bulabilirsiniz:

Sonuç
Bu kılavuzda OpenSSL'in ne olduğunu açıkladık, sertifika imzalama taleplerini (CSR) ve sunucu ortamınızda kullanabileceğiniz bazı önemli OpenSSL komutlarını ele aldık.
Önemli bir komutu mu kaçırdık yoksa CloudSigma üzerindeki sunucu kurulumunuzda yer alan komutlardan herhangi biriyle ilgili sorun mu yaşıyorsunuz? Bunu görüşmek için 7/24 müşteri destek ekibimizle gerçek zamanlı sohbet üzerinden iletişime geçmekten çekinmeyin.
Keyifli Çalışmalar!
Yorumlar
Henüz yorum yapılmamış. İlk siz olun.