Ekim 12

SSL Sertifikası üretme, imzalama, doğrulama


Global ssl sertifika üreticilerinden bıktınız mı? bu paralar artık bu kan emicilere gitmesin değil mi? kendi otoritenizi kurabilirsiniz. hatta ve hatta kurun!

Sırasıyla uygulamanız gereken adımlar;
1- önce bir centos 8 üzerine sertifika otoritesi kuracağız.
2- sonra bu sunucu da root sertifikamızı ve private key imizi oluşturacağız.
zaman zaman root sertifikamızı istemci ve sunucularımızın trusted keystorelarına yükleyeceğiz.
3- sonra örnek bir linux yada windows sunucuda secure bir servis için server key ve server csr (certificate signing request, sertifika imzalama isteği) oluşturacağız.
4- sonra bu isteği sertifika otoritemize gönderip private key ile imzalayacağız.
5- sonra server sertifikamızı alıp servisimizin ayarlarını yapacağız.
6- sonra root sertifikamızı örnek bir istemcinin trusted key store una ekleyeceğiz. (normalde işletim sistemi ve browserlar global sertifika üreticilerinin root sertifikalarını kurulum sırasında bilgisayarınızın keystore una yüklüyorlar, böylece global sertifika üreticilerinin sertifikaları servislerle istemcilerin konuşmalarını güvenli hale getiriyor, gidip secure bir siteye girin, sertifikasının hangi global kan emici tarafından imzalandığına bakın, sonra trusted keystore unuza girip o kan emiciyi kaldırın, artık kan emicinin imzaladığı hiç bir sertifikayı bilgisayarınız kabul etmeyecektir. Active Directory kullanıyorsanız kendi sertifika otoritenizin root sertifikasını basit bir policy ile tüm domain kullanıcılarının bilgisayarına login sırasında yükleyebilirsiniz.)
7- sonra servisimizi bir istemciden (bizim örneğimizde web server kullanıyoruz) çağıracağız ve nasıl trusted göründüğünü inceleyeceğiz.

CA Kurulumu
root olmayan sudoer yetkisi olan kullanıcı ile Centos 8 ca otorite sunucuma ssh ile bağlanıyorum. extra packages içerisinden bir uygulama kuracağım için önce epel i kuruyorum, ardından easy-rsa i kuruyorum.

[baris@labca /]$ sudo dnf install epel-release
[sudo] password for baris:
CentOS-8 — AppStream 3.9 MB/s | 7.0 MB 00:01
…..
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
Is this ok [y/N]: y
Key imported successfully
Installed:
epel-release-8–8.el8.noarch
Complete!
[baris@labca /]$ sudo dnf install easy-rsa
Extra Packages for Enterprise Linux 66 kB/s | 118 kB 00:01

Installing:
easy-rsa noarch 3.0.7–1.el8 epel 46 k
Installed size: 117 k
Is this ok [y/N]: y
….
Installed:
easy-rsa-3.0.7–1.el8.noarch
Complete!
/home/baris/ altında easy-rsa klasöründe public ve private keyler oluşturacağım için bir klasör açıyorum, ca işlemleri için gerekli dosyaları
/usr/share/easy-rsa/3/ klasöründen yeni klasörüme symlink olarak bağlıyorum. klasörü baris user ı dışında kimse erişemeyecek şekilde yetkilendiriyorum. private key de bu klasör altında olacağından bu çok önemli. private key i hiç bir şekilde CA sunucusu dışına çıkartmamamız gerekiyor, eğer bu dosya bir şekilde sunucudan çıkarsa daha önce üretip yayınlamış olduğunuz sertifikaların kullanıldığı sistemlerin “man in the middle” ataklarına maruz kalmasının önüne geçemezsiniz.

[baris@labca /]$ mkdir ~/easy-rsa
[baris@labca /]$ ln -s /usr/share/easy-rsa/3/* ~/easy-rsa/
[baris@labca /]$ chmod 700 /home/baris/easy-rsa

ilk olarak init-pki komutu ile public key infrastructure oluşturuyoruz.
[baris@labca /]$ cd ~/easy-rsa
[baris@labca easy-rsa]$ ./easyrsa init-pki

init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /home/baris/easy-rsa/pki

nano text editörü oldukça kullanışlıdır, bazı dosyaları editlemek için nano kuruyoruz.
[baris@labca easy-rsa]$ sudo dnf install nano

/baris/easy-rsa altına “vars” diye bir text dosya açarak CA parametrelerimizi tanımlıyoruz
[baris@labca easy-rsa]$ cd ~/easy-rsa
[baris@labca easy-rsa]$ nano vars
set_var EASYRSA_REQ_COUNTRY “TR”
set_var EASYRSA_REQ_PROVINCE “Istanbul”
set_var EASYRSA_REQ_CITY “Beykoz”
set_var EASYRSA_REQ_ORG “TELCO LAB”
set_var EASYRSA_REQ_EMAIL “admin@lab.local”
set_var EASYRSA_REQ_OU “Community”
set_var EASYRSA_ALGO “ec”
set_var EASYRSA_DIGEST “sha512”

CTRL+X ile kaydetme onayını verip çıkıyoruz ve CA mızı oluşturmak için easyrsa komutunu build-ca parametresiyle çalıştırıyoruz. bu kısımda vereceğiniz şifre private key ile sertifika imzalamada ve public key in clientların trusted key storelarına yüklenmesi sırasında sorulacaktır. parametrelere nopass i de ekleyerek password kullanmadan da oluşturabilirsiniz.
[baris@labca easy-rsa]$ ./easyrsa build-ca
Using SSL: openssl OpenSSL 1.1.1c FIPS 28 May 2019

Enter New CA Key Passphrase:
Re-Enter New CA Key Passphrase:
Generating RSA private key, 2048 bit long modulus (2 primes)
…….+++++
………………………..+++++
e is 65537 (0x010001)
You are about to be asked to enter information that will be incorpora ted
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
— — –
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:Lab L ocal CA

CA creation complete and you may now import and sign cert requests.
Your new CA certificate file for publishing is at:
/home/baris/easy-rsa/pki/ca.crt
CA sunucusu yani sertifika otoriteniz artık hazır.
public key (yani domaininizdeki tüm istemcilerin trusted key store larına import edeceği root sertifikası) /home/baris/easy-rsa/pki/ca.crt dosyası.
private key (yani diğer sunucularda kullanacağınız sertifikaları imzalayacağınız ve ca sunucusu dışına çıkarmayacağınız key dosyanız) /home/baris/easy-rsa/pki/private/ca.key dosyası.

SECURE WEB SERVER KURULUMU
yine bir başka centos 8 sunucumuzu önce kendi sertifika otoritemiz ile tanıştırarak root sertifikamızı sunucumuzun trusted key store una ekleyeceğiz. ca sunucumuzdaki public key imizi (/home/baris/easy-rsa/pki/ca.crt) cat komutuyla ekrana döktürüp kopyaladıktan sonra yeni sunucumuzda /tmp/ca.crt dosyasını oluşturarak içine kaydediyoruz.

[baris@labca easy-rsa]$ cat ~/easy-rsa/pki/ca.crt
— — -BEGIN CERTIFICATE — — –
MIIDTjCCAjagAwIBAgIUQRY1WZrvgRXMu…..
WMCtB+Xrntns30cWscPuY6MNgM8+a1gxZkruT4xbTnv3oQ==
— — -END CERTIFICATE — — –
[root@SRVB ~]# nano /tmp/ca.crt
— — -BEGIN CERTIFICATE — — –
MIIDTjCCAjagAwIBAgIUQRY1WZrvgRXMu…..
WMCtB+Xrntns30cWscPuY6MNgM8+a1gxZkruT4xbTnv3oQ==
— — -END CERTIFICATE — — –
[root@SRVB ~]# cp /tmp/ca.crt /etc/pki/ca-trust/source/anchors/
[root@SRVB ~]# update-ca-trust

sunucuma openssl , apache 2 + modssl kurup kendi sertifika otoritemin imzaladığı sertifika ile web hizmeti yayınlayacağım. firewall da 443 portuna erişim izni tanımlayacağım.
[root@SRVB etc]# dnf install openssl httpd mod_ssl
[root@SRVB conf.d]# firewall-cmd -zone=public -add-port=443/tcp - p ermanent
[root@SRVB conf.d]# firewall-cmd -reload

/tmp altında server.key ve server.csr oluşturacağım
[root@SRVB ~]# cd /tmp

[root@SRVB /tmp]# openssl genrsa -out baris-server.key
Generating RSA private key, 2048 bit long modulus (2 primes)
……….+++++
…………………………………+++++
e is 65537 (0x010001)
[root@SRVB /tmp]# openssl req -new -key baris-server.key -out baris-server.req
You are about to be asked to enter information that will be incorpora ted
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
— — –
Country Name (2 letter code) [XX]:TR
State or Province Name (full name) []:Istanbul
Locality Name (eg, city) [Default City]:Istanbul
Organization Name (eg, company) [Default Company Ltd]:BKF RND
Organizational Unit Name (eg, section) []:Community
Common Name (eg, your name or your server’s hostname) []:srvb.lab.loc al
Email Address []:

Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
[root@SRVB practice-csr]# openssl req -in baris-server.req -noout -su bject
subject=C = TR, ST = Istanbul, L = Istanbul, O = BKF RND, OU = Commun ity, CN = srvb.lab.local

csr talebimi CA sunucuma gönderiyorum. root olmayan kullanıcımı kullanarak yapıyorum.

[root@SRVB practice-csr]# scp baris-server.req baris@192.168.7.49:/tm p/baris-server.req
The authenticity of host ‘192.168.7.49 (192.168.7.49)’ can’t be estab lished.
ECDSA key fingerprint is SHA256:YtxAe/zcUSk1Z5rkmlo430K5/ZYvZMYEVYJo9 t0F0jc.
Are you sure you want to continue connecting (yes/no/[fingerprint])? y
Please type ‘yes’, ‘no’ or the fingerprint: yes
Warning: Permanently added ‘192.168.7.49’ (ECDSA) to the list of know n hosts.
baris@192.168.7.49’s password:
baris-server.req 100% 1017 1.0MB/s 00:00

CA sunucumda csr ı imzalayarak server.crt dosyasını oluşturup web sunucuma geri gönderiyorum.

[baris@labca ~]$ cd ~/easy-rsa
[baris@labca easy-rsa]$ ./easyrsa import-req /tmp/baris-server.req baris-server

[baris@labca easy-rsa]$ ./easyrsa sign-req server baris-server
Using SSL: openssl OpenSSL 1.1.1c FIPS 28 May 2019

You are about to sign the following certificate.
Please check over the details shown below for accuracy. Note that thi s request
has not been cryptographically verified. Please be sure it came from a trusted
source or that you have verified the request checksum with the sender  .

Request subject, to be signed as a server certificate for 825 days:

subject=
countryName = TR
stateOrProvinceName = Istanbul
localityName = Istanbul
organizationName = BKF RND
organizationalUnitName = Community
commonName = srvb.lab.local

Type the word ‘yes’ to continue, or any other input to abort.
Confirm request details: yes
Using configuration from /home/baris/easy-rsa/pki/easy-rsa-6199.U4e0G A/tmp.aSdJmT
Enter pass phrase for /home/baris/easy-rsa/pki/private/ca.key:
Check that the request matches the signature
Signature ok
The Subject’s Distinguished Name is as follows
countryName  :PRINTABLE:’TR’
stateOrProvinceName  :ASN.1 12:’Istanbul’
localityName  :ASN.1 12:’Istanbul’
organizationName  :ASN.1 12:’BKF RND’
organizationalUnitName:ASN.1 12:’Community’
commonName  :ASN.1 12:’srvb.lab.local’
Certificate is to be certified until Sep 15 07:33:54 2022 GMT (825 da ys)

Write out database with 1 new entries
Data Base Updated

Certificate created at: /home/baris/easy-rsa/pki/issued/baris-server. crt

[baris@labca easy-rsa]$ scp pki/issued/baris-server.crt root@192.168. 7.22:/tmp
root@192.168.7.22’s password:
baris-server.crt 100% 4828 236.6KB/s 00:00

[root@SRVB tmp]# ls
baris-server.crt

[root@SRVB /tmp]# cp baris-server.key /etc/httpd/ssl/
[root@SRVB /tmp]# cp baris-server.crt /etc/httpd/ssl/
[root@SRVB /tmp]# cp /tmp/ca.crt /etc/httpd/ssl/

ssl conf içerisinde yeni sertifikamızı tanımlıyoruz

[root@SRVB /tmp]# nano /etc/httpd/conf.d/ssl.conf
#SSLCertificateFile /etc/pki/tls/certs/localhost.crt
SSLCertificateFile /etc/httpd/ssl/baris-server.crt

# Server Private Key:
# If the key is not combined with the certificate, use this
# directive to point at the key file. Keep in mind that if
# you’ve both a RSA and a DSA private key you can configure
# both in parallel (to also allow the use of DSA ciphers, etc.)
# ECC keys, when in use, can also be configured in parallel
#SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
SSLCertificateKeyFile /etc/httpd/ssl/baris-server.key

[root@SRVB /tmp]#systemctl status httpd
[root@SRVB /tmp]#systemctl enable httpd
[root@SRVB /tmp]#systemctl start httpd
[root@SRVB /tmp]#systemctl status httpd
Secure Web Server kurulumumuz tamamlandı.

İstemci ye root sertifikamızı yükleyip secure web serverımızı
deneyeceğiz.
bunun için bir windows 10 kullanıyorum, mmc (microsoft management console) yi run as admin ile açıyorum. file menüsü add remove snap-ins adımından certificates i seçerek selected bölümüne taşıyıp next e basıyorum. Arada certificates i hangi account için açtığımı soracak “computer account” u seçiyorum.

Test sunucumun https servisini çağırıyorum ve sertifikayı kontrol ediyorum.

 


Copyright 2021. All rights reserved.

Posted 12.10.2019 by baris in category "Uygulama