Ubuntu 20.04 Üzerinde Bir Sertifika Otoritesi (CA) Kurulumu ve Yapılandırması
Bir Sertifika Otoritesi (CA), dijital sertifikalar veren ve yöneten güvenilir bir kuruluştur. Bu sertifikalar, web sitelerinin, sunucuların ve istemcilerin kimliklerini doğrulamak, iletişimi şifrelemek ve verilerin bütünlüğünü sağlamak için kritik öneme sahiptir. Genel kullanıma açık CA’lar (örneğin Let’s Encrypt, DigiCert) internet üzerindeki geniş kitleler için sertifikalar sağlarken, özel bir CA kurmak, genellikle iç ağlar, geliştirme ortamları, IoT cihazları veya belirli uygulamalar gibi kapalı veya özel sistemlerde kimlik doğrulama ve güvenliği sağlamak için tercih edilir. Bu makalede, Ubuntu 20.04 işletim sistemi üzerinde OpenSSL araç setini kullanarak kendi özel Sertifika Otoritenizi nasıl kuracağınızı ve yapılandıracağınızı adım adım detaylı bir şekilde inceleyeceğiz.
Giriş: Sertifika Otoritesinin Önemi
Günümüzün dijital dünyasında güvenlik, vazgeçilmez bir unsurdur. Veri ihlalleri, kimlik avı saldırıları ve yetkisiz erişim girişimleri giderek artarken, sistemler arası güvenli iletişimi sağlamak için güçlü mekanizmalara ihtiyaç duyulmaktadır. İşte bu noktada Sertifika Otoriteleri devreye girer. Bir CA, dijital kimlikleri doğrulayan ve bu kimlikleri bir dijital sertifika aracılığıyla onaylayan bir üçüncü taraftır. Bu sertifikalar, bir sunucunun veya istemcinin iddia ettiği kişi veya kuruluş olduğunu kanıtlayan bir pasaport gibidir.
Özel bir CA kurmanın başlıca nedenleri şunlardır:
* İç Ağ Güvenliği: Şirket içi sunucular, VPN’ler, Wi-Fi ağları ve diğer iç hizmetler için güvenli bağlantılar sağlamak.
* Geliştirme ve Test Ortamları: Geliştiricilerin, gerçek dünya senaryolarını taklit eden güvenli ortamlar oluşturmasına olanak tanımak.
* IoT Cihazları: Büyük ölçekli IoT dağıtımlarında cihaz kimlik doğrulamasını ve güvenli iletişimi yönetmek.
* Maliyet Etkinliği: Ticari CA’lardan sertifika satın alma maliyetlerinden kaçınmak.
* Kontrol: Sertifika politikaları, geçerlilik süreleri ve iptal süreçleri üzerinde tam kontrol sahibi olmak.
Bu makale boyunca, OpenSSL’in güçlü yeteneklerini kullanarak sıfırdan bir Root CA oluşturacak, bu CA ile sunucu ve istemci sertifikalarını imzalayacak ve sertifika iptali gibi yönetimsel görevleri ele alacağız.
Ön Gereksinimler
CA kurulumuna başlamadan önce aşağıdaki ön gereksinimleri karşıladığınızdan emin olun:
* Ubuntu 20.04 Sunucusu: Temiz bir Ubuntu 20.04 LTS kurulumuna sahip bir sunucu.
* Root veya Sudo Erişimi: Sisteme root kullanıcısı olarak veya sudo ayrıcalıklarına sahip bir kullanıcı ile erişim.
* Temel Linux Komut Satırı Bilgisi: Dosya sistemi navigasyonu, dosya oluşturma ve düzenleme gibi temel komutlara aşinalık.
* Sistem Güncellemesi: Kuruluma başlamadan önce sistem paketlerini güncelleyin:
sudo apt update
sudo apt upgrade -y
* OpenSSL Kurulumu: OpenSSL genellikle Ubuntu’da varsayılan olarak yüklü gelir. Yüklü değilse, aşağıdaki komutla kurabilirsiniz:
sudo apt install openssl -y
CA Kavramlarını Anlamak
Bir CA kurmadan önce, ilgili temel kavramları anlamak önemlidir:
* X.509 Sertifikası: Dijital sertifikalar için standart bir formattır. Kimlik bilgilerini (ortak ad, kuruluş vb.), sertifikanın geçerlilik süresini, sertifika sahibinin genel anahtarını ve sertifikayı imzalayan CA’nın dijital imzasını içerir.
* Özel Anahtar (Private Key): Sadece sahibi tarafından bilinen ve gizli tutulması gereken matematiksel bir değerdir. Şifreleme ve dijital imza oluşturmak için kullanılır.
* Genel Anahtar (Public Key): Özel anahtarla eşleşen ve herkesle paylaşılabilen bir anahtardır. Şifre çözme ve dijital imzaları doğrulamak için kullanılır.
* Sertifika İmzalama İsteği (CSR – Certificate Signing Request): Bir sertifika sahibi tarafından oluşturulan ve sertifika için gerekli kimlik bilgilerini (ortak ad, kuruluş vb.) ve genel anahtarını içeren bir istektir. Bu istek, bir CA’ya gönderilir ve CA tarafından imzalanarak bir sertifikaya dönüştürülür.
* Sertifika İptal Listesi (CRL – Certificate Revocation List): Süresi dolmamış ancak çeşitli nedenlerle (örneğin özel anahtarın tehlikeye girmesi) geçersiz kılınmış sertifikaların bir listesidir. CA tarafından düzenli olarak yayınlanır.
* Root CA: Bir sertifika hiyerarşisinin en üstünde yer alan CA’dır. Kendi sertifikasını kendisi imzalar (self-signed) ve tüm güvenin başlangıç noktasıdır.
* Intermediate CA: Bir Root CA tarafından imzalanan ve daha sonra diğer sertifikaları imzalamak için kullanılan bir CA’dır. Root CA’nın özel anahtarını çevrimdışı ve daha güvenli tutmak için kullanılır. Bu makalede Root CA kurulumuna odaklanacağız.
CA Dizin Yapısını Kurma
CA’nız için güvenli ve düzenli bir çalışma ortamı oluşturmakla başlayalım. Tüm CA dosyalarını tek bir merkezi konumda tutmak önemlidir.
CA Dizini Oluşturma
İlk olarak, CA’nız için ana dizini oluşturalım. Genellikle /etc/ssl altında veya /root/ca gibi güvenli bir konumda tutulur. Biz /root/ca dizinini kullanacağız.
sudo mkdir /root/ca
cd /root/ca
Alt Dizinleri Oluşturma
CA’nın düzgün çalışması için belirli alt dizinlere ihtiyacı vardır:
* certs: İmzalanmış sertifikaların depolanacağı yer.
* newcerts: Yeni oluşturulan sertifikaların sembolik bağlantılarının tutulacağı yer (OpenSSL’in dahili kullanımı için).
* private: CA’nın özel anahtarının depolanacağı yer (çok iyi korunmalıdır!).
* crl: Sertifika İptal Listelerinin (CRL) depolanacağı yer.
* requests: İmzalama için gelen CSR’lerin geçici olarak depolanacağı yer.
mkdir certs crl newcerts private requests
chmod 700 private # Özel anahtarların olduğu dizini sadece sahibinin okuyabileceği şekilde ayarla
CA İçin Gerekli Dosyaları Oluşturma
OpenSSL, CA’nın durumunu izlemek için bazı dosyaları gerektirir:
* index.txt: CA tarafından imzalanan tüm sertifikaların bir veritabanı.
* serial: Yeni sertifikalar için bir sonraki seri numarasını içeren dosya.
* crlnumber: Bir sonraki CRL numarası (isteğe bağlı ama iyi bir pratik).
touch index.txt
echo 1000 > serial
echo 1000 > crlnumber
serial dosyasındaki 1000 değeri, ilk sertifikanın seri numarasının 1000 olacağı anlamına gelir. Her yeni sertifikada bu numara otomatik olarak artırılacaktır.
CA İçin OpenSSL Yapılandırması
OpenSSL’in CA işlevselliğini kullanmak için bir yapılandırma dosyasına ihtiyacımız var. Bu dosya, CA’nın varsayılan değerlerini, politikalarını ve dizin yollarını tanımlar. Kendi openssl.cnf dosyamızı oluşturacağız.
nano openssl.cnf
Aşağıdaki içeriği openssl.cnf dosyasına yapıştırın. Bu dosya oldukça detaylıdır ve her bölümün ne anlama geldiğini açıklayacağız.
# openssl.cnf - CA yapılandırma dosyası
# Bu dosya, Root CA'mızın çalışma şeklini tanımlar.
Ana bölümler
[ ca ]
default_ca = CA_default # Kullanılacak CA yapılandırmasının adı
[ CA_default ]
Dizinler ve dosyalar
dir = /root/ca # Ana CA dizini
certs = $dir/certs # İmzalanmış sertifikalar
crl_dir = $dir/crl # CRL'ler
new_certs_dir = $dir/newcerts # Yeni sertifikalar (sembolik bağlantılar)
database = $dir/index.txt # İmzalanan sertifikaların veritabanı
serial = $dir/serial # Bir sonraki seri numarasını içeren dosya
crlnumber = $dir/crlnumber # Bir sonraki CRL numarası
crl = $dir/crl.pem # Son CRL
private_key = $dir/private/ca.key.pem # CA'nın özel anahtarı
certificate = $dir/ca.cert.pem # CA'nın sertifikası
Varsayılan değerler
default_days = 3650 # Sertifika geçerlilik süresi (gün)
default_crl_days = 30 # CRL geçerlilik süresi (gün)
default_md = sha256 # Kullanılacak özet algoritması
preserve = no # CSR'deki DN'yi koruma
policy = policy_strict # Kullanılacak politika
Politikalar
[ policy_strict ]
countryName = match # Ülke adı eşleşmeli
stateOrProvinceName = match # Eyalet adı eşleşmeli
organizationName = match # Kuruluş adı eşleşmeli
organizationalUnitName = optional # Birim adı isteğe bağlı
commonName = supplied # Ortak ad sağlanmalı
emailAddress = optional # E-posta isteğe bağlı
[ policy_loose ]
countryName = optional
stateOrProvinceName = optional
organizationName = optional
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
Sertifika imzalama istekleri (CSR) için varsayılanlar
[ req ]
default_bits = 2048 # Varsayılan anahtar boyutu (bit)
distinguished_name = req_distinguished_name # Ayırt edici ad bölümü
string_mask = utf8only # UTF-8 karakterleri kullan
Kendi kendini imzalayan CA sertifikası için kullanılan bölüm
[ req_distinguished_name ]
countryName = Ülke Adı (2 harfli kod)
countryName_default = TR
stateOrProvinceName = Eyalet veya İl Adı
stateOrProvinceName_default = Istanbul
localityName = Şehir Adı
localityName_default = Istanbul
organizationName = Kuruluş Adı
organizationName_default = Benim Ozel CA'm
organizationalUnitName = Kuruluş Birimi Adı
organizationalUnitName_default = IT Departmani
commonName = Ortak Ad (CA Adı)
commonName_max = 64
commonName_default = Benim Ozel Root CA
emailAddress = E-posta Adresi
emailAddress_default = ca-admin@example.com
Kendi kendini imzalayan CA sertifikası uzantıları
[ v3_ca ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical,CA:true
keyUsage = critical,digitalSignature,cRLSign,keyCertSign
Sunucu sertifikaları için uzantılar
[ usr_cert ]
basicConstraints = CA:FALSE
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer
keyUsage = digitalSignature,nonRepudiation,keyEncipherment,dataEncipherment
extendedKeyUsage = serverAuth,clientAuth # Hem sunucu hem de istemci kimlik doğrulaması için
İstemci sertifikaları için uzantılar (opsiyonel, usr_cert yeterli olabilir)
[ client_cert ]
basicConstraints = CA:FALSE
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer
keyUsage = digitalSignature,keyEncipherment
extendedKeyUsage = clientAuth
CRL uzantıları
[ crl_ext ]
authorityKeyIdentifier=keyid:always
Bu yapılandırma dosyasının ana bölümleri şunlardır:
* [ ca ]: OpenSSL’in ca komutunun varsayılan olarak hangi CA yapılandırmasını kullanacağını belirtir.
* [ CA_default ]: CA’nın çalışma dizinlerini, veritabanı dosyalarını, özel anahtar ve sertifika yollarını tanımlar. default_days sertifikaların varsayılan geçerlilik süresini, default_md ise kullanılacak özet algoritmasını belirler. policy ise CSR’leri imzalarken uygulanacak kuralları tanımlar.
* [ policy_strict ]: Bu politika, sertifika imzalama isteğindeki (CSR) bazı alanların (Ülke, Eyalet, Kuruluş) CA’nın kendi sertifikasındaki ilgili alanlarla eşleşmesini zorunlu kılar. Ortak adın (Common Name) sağlanmasını gerektirir.
* [ req ]: Sertifika imzalama istekleri (CSR) ve kendi kendini imzalayan sertifikalar oluştururken kullanılacak varsayılan anahtar boyutu ve ayırt edici ad (Distinguished Name – DN) bölümünü tanımlar.
* [ req_distinguished_name ]: CA sertifikası oluşturulurken kullanıcıya sorulacak bilgilerin varsayılan değerlerini ve açıklamalarını içerir.
* [ v3_ca ]: Root CA sertifikası için kullanılacak X.509 uzantılarını tanımlar. basicConstraints = critical,CA:true bu sertifikanın bir CA olduğunu ve diğer sertifikaları imzalayabileceğini belirtir. keyUsage ise anahtarın hangi amaçlarla kullanılabileceğini gösterir (sertifika imzalama, CRL imzalama vb.).
* [ usr_cert ]: CA tarafından imzalanacak son kullanıcı (sunucu veya istemci) sertifikaları için kullanılacak uzantıları tanımlar. basicConstraints = CA:FALSE bu sertifikanın başka sertifikaları imzalayamayacağını belirtir. extendedKeyUsage ise anahtarın hangi ek amaçlarla kullanılabileceğini (sunucu kimlik doğrulaması, istemci kimlik doğrulaması) belirler.
* [ client_cert ]: İstemci sertifikaları için özel uzantılar (isteğe bağlı, usr_cert genellikle yeterlidir).
* [ crl_ext ]: CRL’ler için kullanılacak uzantıları tanımlar.
Dosyayı kaydedip kapatın (CTRL+O, Enter, CTRL+X).
Root CA Anahtarı ve Sertifikası Oluşturma
Şimdi sıra, Root CA’mızın özel anahtarını ve kendi kendini imzalayan sertifikasını oluşturmaya geldi. Bu adımlar CA’nın kalbidir ve dikkatle yapılmalıdır.
Root CA Özel Anahtarını Oluşturma
CA’nın özel anahtarını, güçlü bir şifre (passphrase) ile şifrelenmiş olarak oluşturacağız. Bu anahtar, CA’nın kimliğini doğrulamak ve tüm sertifikaları imzalamak için kullanılacaktır. Bu anahtarın güvenliği son derece önemlidir.
openssl genrsa -aes256 -out private/ca.key.pem 4096
chmod 400 private/ca.key.pem # Sadece sahibinin okuyabileceği şekilde ayarla
* genrsa: RSA özel anahtarı oluştur.
* -aes256: Anahtarı AES-256 algoritmasıyla şifrele. Bir şifre belirlemeniz istenecek.
* -out private/ca.key.pem: Anahtarı belirtilen dosyaya kaydet.
* 4096: Anahtarın bit boyutu (önerilen).
Bu komutu çalıştırdığınızda, güçlü bir şifre girmeniz ve tekrar onaylamanız istenecektir. Bu şifreyi asla unutmayın!
Root CA Sertifikasını Oluşturma
Şimdi, Root CA’mızın kendi kendini imzalayan sertifikasını oluşturacağız. Bu sertifika, Root CA’nın genel anahtarını içerir ve diğer tüm sertifikalar için güven zincirinin başlangıç noktası olacaktır.
openssl req -config openssl.cnf \
-key private/ca.key.pem \
-new -x509 -days 3650 \
-sha256 -extensions v3_ca \
-out ca.cert.pem
chmod 444 ca.cert.pem # Herkesin okuyabileceği şekilde ayarla
* req: Sertifika imzalama isteği (CSR) veya kendi kendini imzalayan sertifika oluşturma komutu.
* -config openssl.cnf: Yapılandırma dosyamızı kullan.
* -key private/ca.key.pem: Root CA’nın özel anahtarını kullan.
* -new: Yeni bir sertifika isteği oluştur.
* -x509: Kendi kendini imzalayan bir sertifika oluştur (CSR yerine).
-days 3650: Sertifika 10 yıl geçerli olsun (365 10).
* -sha256: SHA-256 özet algoritmasını kullan.
* -extensions v3_ca: openssl.cnf dosyasındaki v3_ca bölümündeki uzantıları kullan.
* -out ca.cert.pem: Sertifikayı belirtilen dosyaya kaydet.
Bu komutu çalıştırdığınızda, CA’nın özel anahtarı için belirlediğiniz şifreyi girmeniz istenecektir. Ardından, openssl.cnf dosyasında tanımlanan [ req_distinguished_name ] bölümündeki bilgilere göre size bazı sorular sorulacaktır (Ülke, Eyalet, Kuruluş, Ortak Ad vb.). Varsayılan değerleri kabul edebilir veya kendi bilgilerinizi girebilirsiniz. Ortak Ad (Common Name) alanı, CA’nızın adı olacağı için önemlidir (örn. “Benim Ozel Root CA”).
Artık /root/ca dizininizde private/ca.key.pem (Root CA özel anahtarı) ve ca.cert.pem (Root CA sertifikası) dosyalarına sahipsiniz.
CA’yı Yönetme
Root CA’mızı kurduktan sonra, sıra geldi sertifikaları imzalamaya ve yönetmeye.
Sunucu Sertifikalarını İmzalama
Bir sunucu için sertifika imzalama süreci iki ana adımdan oluşur: sunucuda bir özel anahtar ve CSR oluşturma, ardından bu CSR’yi CA’ya gönderip imzalatma.
1. Sunucuda Özel Anahtar ve CSR Oluşturma
Bu adımlar, sertifika almak isteyen sunucunun kendisinde gerçekleştirilmelidir. Örnek olarak webserver.example.com adlı bir sunucu için işlem yapalım.
Sunucu tarafında:
# Sunucu için yeni bir dizin oluştur
mkdir -p /etc/ssl/webserver
cd /etc/ssl/webserver
Sunucunun özel anahtarını oluştur
openssl genrsa -out webserver.key.pem 2048
chmod 400 webserver.key.pem
Sunucunun CSR'sini oluştur
openssl req -new -key webserver.key.pem -out webserver.csr.pem
openssl req komutu çalıştırıldığında, yine bazı bilgiler istenecektir. Ortak Ad (Common Name) alanı, sunucunun tam nitelikli alan adı (FQDN) olmalıdır (örn. webserver.example.com). Diğer bilgiler (Ülke, Eyalet, Kuruluş) CA’nızın politikalarına uygun olmalıdır. openssl.cnf dosyasındaki policy_strict politikası, Ülke, Eyalet ve Kuruluş adlarının CA’nın sertifikasındakiyle eşleşmesini gerektirecektir.
CSR dosyası (webserver.csr.pem) oluşturulduktan sonra, bu dosyayı güvenli bir şekilde CA sunucunuza aktarmanız gerekir (örneğin scp veya sftp kullanarak).
2. CSR’yi CA Tarafında İmzalama
CA sunucusu tarafında:
CSR dosyasını /root/ca/requests dizinine kopyalayın.
# Örnek: CSR dosyasını kopyalama (gerçekte scp ile yapılmalı)
cp /path/to/webserver.csr.pem /root/ca/requests/
cd /root/ca
Şimdi, CSR’yi CA’nızın özel anahtarını kullanarak imzalayacağız.
openssl ca -config openssl.cnf \
-extensions usr_cert \
-days 375 \
-notext -md sha256 \
-in requests/webserver.csr.pem \
-out certs/webserver.cert.pem
* ca: OpenSSL’in CA işlevselliğini kullan.
* -config openssl.cnf: Yapılandırma dosyamızı kullan.
* -extensions usr_cert: openssl.cnf dosyasındaki usr_cert bölümündeki uzantıları kullan (sunucu sertifikaları için uygundur).
* -days 375: Sertifika 375 gün geçerli olsun.
* -notext: Sertifika çıktı dosyasına metin sürümünü ekleme.
* -md sha256: SHA-256 özet algoritmasını kullan.
* -in requests/webserver.csr.pem: İmzalayacağımız CSR dosyası.
* -out certs/webserver.cert.pem: İmzalanmış sertifikayı kaydedeceğimiz yer.
Bu komutu çalıştırdığınızda, CA’nın özel anahtarı için belirlediğiniz şifreyi girmeniz istenecektir. Ardından, sertifikayı imzalayıp imzalamayacağınızı ve veritabanına ekleyip eklemeyeceğinizi onaylamanız istenecektir. Her iki soruya da y ile yanıt verin.
İmzalanmış sertifika (certs/webserver.cert.pem) artık CA dizininizde bulunuyor. Bu sertifikayı ve CA’nızın genel sertifikasını (ca.cert.pem) güvenli bir şekilde sunucuya geri aktarmanız gerekir.
Sunucu tarafında:
# CA sertifikasını ve sunucu sertifikasını kopyalama
scp ca.cert.pem /etc/ssl/webserver/
scp certs/webserver.cert.pem /etc/ssl/webserver/
İlgili izinleri ayarla
chmod 400 webserver.cert.pem
chmod 444 ca.cert.pem
Artık webserver.example.com sunucusu, kendi özel anahtarına (webserver.key.pem), CA tarafından imzalanmış sertifikasına (webserver.cert.pem) ve CA’nın genel sertifikasına (ca.cert.pem) sahiptir. Bu sertifikaları web sunucusu (Nginx, Apache) veya diğer hizmetlerinizde yapılandırabilirsiniz.
İstemci Sertifikalarını İmzalama
İstemci sertifikaları, kullanıcıların veya cihazların bir sunucuya kimliklerini doğrulamak için kullanılır. Süreç, sunucu sertifikalarına benzer, ancak extendedKeyUsage uzantılarında farklılık gösterebilir.
1. İstemcide Özel Anahtar ve CSR Oluşturma
Bu adımlar, sertifika almak isteyen istemcinin kendisinde gerçekleştirilmelidir.
# İstemci için özel anahtar oluştur
openssl genrsa -out client.key.pem 2048
chmod 400 client.key.pem
İstemci için CSR oluştur
openssl req -new -key client.key.pem -out client.csr.pem
CSR oluştururken, Ortak Ad (Common Name) alanı genellikle kullanıcının adı veya cihazın benzersiz kimliği olabilir (örn. john.doe, iot-device-123).
CSR dosyasını (client.csr.pem) güvenli bir şekilde CA sunucunuza aktarın.
2. CSR’yi CA Tarafında İmzalama
CA sunucusu tarafında:
CSR dosyasını /root/ca/requests dizinine kopyalayın.
cp /path/to/client.csr.pem /root/ca/requests/
cd /root/ca
Şimdi, CSR’yi CA’nızın özel anahtarını kullanarak imzalayacağız. openssl.cnf dosyasındaki usr_cert uzantısı hem sunucu hem de istemci kimlik doğrulaması için extendedKeyUsage içerdiğinden, bunu kullanabiliriz. Alternatif olarak, client_cert uzantılarını da kullanabilirdik.
openssl ca -config openssl.cnf \
-extensions usr_cert \
-days 375 \
-notext -md sha256 \
-in requests/client.csr.pem \
-out certs/client.cert.pem
Yine, CA’nın özel anahtarı için şifreyi girin ve onaylayın.
İmzalanmış istemci sertifikası (certs/client.cert.pem) ve CA’nın genel sertifikası (ca.cert.pem) güvenli bir şekilde istemciye aktarılmalıdır. İstemci sertifikaları genellikle bir PKCS#12 (PFX) dosyası olarak dışa aktarılır, bu da özel anahtarı ve sertifikayı tek bir şifrelenmiş dosyada birleştirir ve tarayıcılara veya uygulamalara kolayca aktarılmasını sağlar.
# İstemci için PKCS#12 dosyası oluşturma (CA sunucusunda veya istemcide yapılabilir)
openssl pkcs12 -export -out client.p12 -inkey client.key.pem -in certs/client.cert.pem -certfile ca.cert.pem -name "John Doe Client Certificate"
Bu komut, PKCS#12 dosyasını korumak için bir dışa aktarma şifresi belirlemenizi isteyecektir.
Sertifikaları İptal Etme (Revocation)
Bir sertifikanın özel anahtarı tehlikeye girerse, sertifikanın süresi dolmadan önce geçersiz kılınması gerekiyorsa (örneğin, bir çalışanın ayrılması durumunda), sertifikayı iptal etmeniz gerekir.
1. Sertifikayı İptal Etme
CA sunucusunda, iptal etmek istediğiniz sertifikayı index.txt veritabanında bulun ve seri numarasını not alın. Ya da doğrudan sertifika dosyasını kullanarak iptal edebilirsiniz:
cd /root/ca
openssl ca -config openssl.cnf -revoke certs/webserver.cert.pem
Bu komut, index.txt dosyasındaki ilgili sertifika girişini R (Revoked) olarak işaretleyecektir.
2. Sertifika İptal Listesi (CRL) Oluşturma
Sertifikayı iptal ettikten sonra, bu değişikliği yansıtan yeni bir CRL oluşturmanız gerekir. Uygulamalar ve tarayıcılar, iptal edilmiş sertifikaları kontrol etmek için bu CRL’yi kullanır.
openssl ca -config openssl.cnf -gencrl -out crl/crl.pem
Bu komut, crl/crl.pem dosyasında yeni bir CRL oluşturacaktır. Bu CRL dosyasını, sertifikaları kullanan tüm sunuculara ve istemcilere dağıtmanız veya erişilebilir bir konuma (örn. bir web sunucusu üzerinden HTTP) yerleştirmeniz gerekir. Uygulamalar, sertifikaların hala geçerli olup olmadığını kontrol etmek için bu CRL’yi düzenli olarak indirip kontrol edecektir.
Sertifikaları Yenileme
Sertifikaların süresi dolmadan önce yenilenmesi gerekir. Süreç, yeni bir CSR oluşturup CA tarafından imzalatmakla benzerdir.
1. Sunucuda/İstemcide Yeni CSR Oluşturma: Mevcut özel anahtarı kullanarak yeni bir CSR oluşturun.
openssl req -new -key webserver.key.pem -out webserver_renew.csr.pem
2. CA Tarafında Yeni CSR’yi İmzalama: Yeni CSR’yi CA’ya aktarın ve yukarıdaki imzalama adımlarını izleyerek yeni bir sertifika imzalayın.
openssl ca -config openssl.cnf \
-extensions usr_cert \
-days 375 \
-notext -md sha256 \
-in requests/webserver_renew.csr.pem \
-out certs/webserver_renew.cert.pem
3. Yeni Sertifikayı Dağıtma: Yeni imzalanan sertifikayı sunucuya/istemciye geri aktarın ve eski sertifika ile değiştirin.
CA Sertifikasını Dağıtma
Özel CA’nız tarafından imzalanan sertifikalara güvenilmesi için, Root CA’nızın sertifikasının (ca.cert.pem) istemcilerin (tarayıcılar, işletim sistemleri, uygulamalar) güven deposuna eklenmesi gerekir. Bu, istemcilerin CA’nızı güvenilir bir otorite olarak tanımasını ve dolayısıyla CA’nızın imzaladığı tüm sertifikalara güvenmesini sağlar.
* Linux Sistemlerinde:
sudo cp /root/ca/ca.cert.pem /usr/local/share/ca-certificates/my-ca.crt
sudo update-ca-certificates
* Windows Sistemlerinde: ca.cert.pem dosyasını içe aktarmak için sertifika yöneticisini (certmgr.msc) kullanın ve “Trusted Root Certification Authorities” deposuna yerleştirin.
* macOS Sistemlerinde: ca.cert.pem dosyasını anahtar zinciri erişim uygulamasına sürükleyip bırakın ve “System” anahtar zincirine ekleyin, ardından güven ayarlarını yapın.
* Web Tarayıcılarında: Tarayıcınızın ayarlarına gidin (genellikle “Gizlilik ve Güvenlik” veya “Sertifikalar” bölümü altında) ve Root CA sertifikasını güvenilir kök sertifika olarak içe aktarın.
Güvenlik Hususları
Bir Root CA kurmak, önemli bir sorumluluk getirir. CA’nızın güvenliği, tüm sertifika zincirinizin güvenliğini doğrudan etkiler.
* CA Özel Anahtarının Korunması: Bu, CA’nızın en kritik varlığıdır.
* Güçlü Şifre: Anahtarı oluştururken güçlü ve karmaşık bir şifre kullanın.
* Çevrimdışı CA (Offline CA): İdeal olarak, Root CA’nızın özel anahtarı ve sertifikası, internete bağlı olmayan bir sistemde (örneğin bir sanal makine veya fiziksel bir makine) tutulmalıdır. Sertifika imzalamak gerektiğinde bu sistem açılmalı, işlem yapıldıktan sonra kapatılmalıdır. Bu, Root CA’nızın saldırılara karşı direncini artırır.
* Fiziksel Güvenlik: Anahtarın depolandığı sunucuya veya sisteme fiziksel erişimi kısıtlayın.
* Yedekleme: Özel anahtarı ve sertifikayı güvenli bir şekilde yedekleyin ve birden fazla güvenli konumda saklayın.
* Dizin İzinleri: CA dizinlerinin ve dosyalarının izinlerini sıkı tutun (yukarıda belirtildiği gibi chmod 700 private, chmod 400 private/ca.key.pem).
* CRL Dağıtımı: CRL’nin düzenli olarak güncellendiğinden ve sertifikaları kullanan tüm istemciler tarafından kolayca erişilebilir olduğundan emin olun.
* Denetim ve İzleme: CA’nızın etkinliklerini (sertifika imzalama, iptal etme) düzenli olarak denetleyin ve izleyin.
* Ara CA Kullanımı: Büyük ve karmaşık ortamlarda, Root CA’yı tamamen çevrimdışı tutmak ve tüm imzalama işlemlerini bir veya daha fazla Ara CA aracılığıyla yapmak daha güvenlidir. Bu makalede Root CA’ya odaklandık, ancak gelecekte Ara CA’lar kurmayı düşünebilirsiniz.
Sonuç
Bu makalede, Ubuntu 20.04 üzerinde OpenSSL kullanarak kendi özel Sertifika Otoritenizi (CA) nasıl kuracağınızı ve yapılandıracağınızı adım adım öğrendiniz. Root CA’nın özel anahtarını ve sertifikasını oluşturmaktan, sunucu ve istemci sertifikalarını imzalamaya ve sertifikaları iptal etmeye kadar birçok temel işlemi gerçekleştirdik. Ayrıca, CA’nızın güvenliğini sağlamak için önemli hususları da ele aldık.
Kendi özel CA’nızı yönetmek, sistemleriniz üzerinde daha fazla kontrol ve esneklik sağlar. Ancak bu, aynı zamanda önemli bir güvenlik sorumluluğu da getirir. CA’nızın özel anahtarının güvenliğini sağlamak ve sertifika yönetim süreçlerini dikkatle yürütmek, tüm güven altyapınızın sağlığı için hayati öneme sahiptir. Bu kılavuz, kendi güvenilir sertifika otoritenizi oluşturmanız ve yönetmeniz için sağlam bir temel sağlamıştır.
