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ızopenssl 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 İçicert.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-----
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
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
openssl req -x509 -newkey rsa:2048 -nodes -sha256 -subj '/CN=localhost' \
-keyout localhost-privatekey.pem -out localhost-certificate.pem
Örnek - rsa:1024Host 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
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