1 Aralık 2020 Salı

openssl req aracı İle Self Signed Certificate Üretmek

Giriş
Self signed certificate üretmek için kullanılabilecek araçlardan birisi de openssl req komutu. Açıklaması şöyle.
This option outputs a self signed certificate instead of a certificate request. This is typically used to generate a test certificate or a self signed root CA.
Üretilen sertifika x509 formatında. Bu sertifikanın içine bakmak için "openssl x509" komutu kullanılabilir.

Örnek
Sertifikaya bakmak için şöyle yaparız
openssl x509 -in myserver.crt -text -noout

Java'daki keytool İle Karşılaştırması
Java'daki keytool private key ve sertifikayı tek bir dosya içinde kolayca topluyor. Bu dosya java uygulamalarından rahatça kullanılıyor. 

Ancak "openssl req" aracı iki tane farklı dosya üretiyor. 

Komut Çıktısı
İki tane dosya çıktısı olur "cert.pem" ve "privatekey.pem". Bu dosyalara bezen ".crt" ve ".key" uzantıları da veriliyor. Bir tanesi sertifika, diğeri de private key dosyasıdır.

Private key dosyasında modulus + public exponent + private exponent bilgisi vardır. Private key dosyasını incelemek için openssl rsa aracı kullanılabilir.

Pem Formatında Sertifikanın İçi
cert.pem şöyledir.
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
Pem Formatında Private Key Dosyasının İçi
privatekey.pem şöyledir.
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,58E20DDB682C7B7A
...
-----END RSA PRIVATE KEY-----
Açıklaması şöyle
encoded and created in a Base-64 based PEM format which is not human-readable
Seçenekler
days :seçeneği ile sertifikanın kaç gün geçerli olacağı belirtilir.
newkey :seçeneği ile kullanılacak algoritma belirtilir. Genellikle rsa:1024 , rsa:2048 , rsa:4096 seçilir.
sha256 :  Sertifika içinde kullanılacak Signature Algorithm 'in ne olacağını belirtir. Bu parametre mecburi değildir. Basit bir açıklama şöyle
... the server sends a chain of certificates. Each certificate in the chain contains a public key, a name (a domain for the server, an organization name for a CA), some extra information, and a signature covering all that. The signature was created by the private key of the next certificate in the chain, and can be verified by that certificate's public key.
nodes : Açıklaması şöyle. Private key dosyasının şifrelenmemesini sağlar.
The option -nodes is not the English word "nodes", but rather is "no DES". When given as an argument, it means OpenSSL will not encrypt the private key in a PKCS#12 file.
keyout :seçeneği ile private key dosyası belirtilir.
out : seçeneği ile sertifika dosyası belirtilir.
x509: openssl req ile CSR veya sertifika üretilebilir. Sertifika üreteceğimizi belirtir.

1. -new seçeneği
Burada sadece -new seçeneği belirtiliyor. -newkey belirtilmiyor yani kullanılacak algoritmayı seçmiyoruz.
Örnek
Şöyle yaparız
openssl req -nodes -new -x509 -keyout private.pem -out server.cert
Çıktı olarak şunu alırız
Generating a 2048 bit RSA private key
..................................+++
..................................................................+++
writing new private key to 'private.pem'
-----
You are about to be asked to enter information that will be incorporated
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) []:US
State or Province Name (full name) []:IN
Locality Name (eg, city) []:Zionsville
Organization Name (eg, company) []:JVC
Organizational Unit Name (eg, section) []:Development
Common Name (eg, fully qualified host name) []:Planning Poker
Email Address []:<my-email-address-was-entered-here>
2. -newkey seçeneği
Kullanılacak algoritmayı seçiyoruz
Örnek -  rsa:4096
Şöyle yaparız
openssl req -new -newkey rsa:4096 -x509 -sha256 -days 365 -nodes -out
MyCertificate.crt -keyout MyKey.key
Örnek  rsa:2048
Şöyle yaparız.
openssl req -x509 -nodes -days 1825 -newkey rsa:2048 \
-keyout private/vsftpd.key \
-out certs/vsftpd.crt
Örnek - rsa:2048
Şöyle yaparız.
openssl req -x509 -newkey rsa:2048 -keyout privatekey.pem -out cert.pem -days XXX
Örnek  - rsa:2048
Şöyle yaparız.
openssl req -x509 -newkey rsa:2048 -keyout privatekey.pem -out cert.pem -days 30
Örnek - rsa:2048
Şöyle yaparız
openssl req -x509 -newkey rsa:2048 -nodes -sha256 -subj '/CN=localhost' \
  -keyout localhost-privatekey.pem -out localhost-certificate.pem
Örnek - rsa:1024
Host ismi vermek için şöyle yaparız
openssl req -x509 -newkey rsa:1024 -keyout privatekey.pem -out cert.pem -days 999
  -subj "/CN=localhost"
3. -keyout seçeneği
Örnek
Şöyle yaparız
openssl req -new \
    -newkey rsa:4096 \ # Kullanılacak algoritma
    -nodes \ # Private key dosyasını şifreleme
    -x509 \ # Self signed sertifika üret
    -days 3650 \  # 10 yıl geçerli olsun
    -keyout self_signed.key \ #Private key dosyası
    -out self_signed.pem \ # Sertifika dosyası
    -subj '/CN=TestCertificate/C=US/ST=CA/L=SF/O=Test' # Sertifikaya girdi

4. -key seçeneği
Örnek
Normalde private key vermeye gerek yoktur. Eğer kendimiz vermek istersek şöyle yaparız
# Generate private key
openssl genrsa -des3 -out myCA.key 2048
# Generate root certificate
openssl req -x509 -new -nodes -key myCA.key -sha256 -days 825 -out myCA.pem
# Convert to Botan Format
openssl pkcs8 -topk8 -in myCA.key > myCAKey.pkcs8.pem

Hiç yorum yok:

Yorum Gönder