Bu eğitimde Java keytool aracıyla Android için CSR (Sertifika İmzalama Talebi) oluşturmayı öğreneceksiniz.
Android, telefonun kendisinde genel CA TLS CSR’leri oluşturmaz: genel CA sertifikası bir sunucu (veya kullanıcının kontrol ettiği bir cihaz) için verilir ve Android uygulamaları ile tarayıcıları bunu kullanır. Aşağıdaki keytool işlemi, bir Java keystore’undan PKCS #10 talebi oluşturur; bu, Android uygulamasının veya mobil hedefli bir web sitesinin güveneceği bir TLS sertifikasına gerek olduğunda doğru yoldur.
Durumunuza uygun işlemi seçin
“Android için CSR” üç farklı anlama gelebilir. Herhangi bir komut çalıştırmadan önce doğru sayfada olduğunuzdan emin olun:
- Android istemcilerinin bağlanacağı bir sunucu için TLS sertifikası. Bu en yaygın durumdur ve bu sayfanın kalanı bunu kapsar. Aşağıdaki keytool’u kullanın veya CSR’yi sunucu dışında CSR Oluşturucu aracımızla oluşturun, ardından verilen sertifikayı uygulamanızın eriştiği web sunucusuna, API ağ geçidine veya MQTT broker’ına yükleyin.
- Bir APK veya AAB için imzalama anahtarı. Android uygulama imzalama, bir Java keystore içinde kendinden imzalı bir RSA veya EC anahtarı kullanır: burada bir genel CA yer almaz ve gönderilecek bir CSR yoktur. Anahtarı Android Studio’nun Build > Generate Signed Bundle / APK sihirbazından keytool ile oluşturun (veya keytool’u elle çalıştırın), ardından anahtarı Google Play App Signing’e kaydedin. Bunun için genel bir sertifika sipariş etmeyin.
- Bir MDM veya EMM tarafından sağlanan cihaz sertifikası. Android Enterprise, yönetilen cihazlara SCEP, EST veya Managed Configurations API üzerinden istemci sertifikaları verir. CSR oluşturulur ve sertifika MDM tarafından otomatik olarak yüklenir. Manuel bir keytool adımı yoktur.
Durumunuz ilk madde ise devam edin. İşlem iki bölümden oluşur: özel anahtarı barındıran bir PKCS12 keystore oluşturmak ve ardından bu keystore’dan CSR’yi dışa aktarmak.
İhtiyacınız olanlar
- PATH’inizde keytool komutunun kullanılabilmesi için bir Java kurulumu (JDK veya JRE).
keytool -helpile doğrulayın. Windows’ta Java’nın bin klasörünün PATH’te olması gerekir; ya da keytool’u doğrudan JDK’nın bin dizininden çalıştırabilirsiniz. - Güvenceye almak istediğiniz kesin tam nitelikli alan adı (FQDN) (örneğin www.yoursite.com), ayrıca aynı sertifikada olmasını istediğiniz diğer ana bilgisayar adları (Subject Alternative Name listesi için).
- Distinguished Name için kuruluşunuzun yasal bilgileri (ülke, eyalet, şehir, kuruluş adı). Değerleri kamuya açık ticari kayıtlarda göründükleri şekliyle tam olarak kullanın: CA, uyuşmazlıkları reddedecektir.
Adım 1: Keystore ve özel anahtarı oluşturun
CSR’nizi zaten oluşturduysanız, doğrudan CSR’yi gönderme bölümüne ve ardından Android SSL kurulum talimatlarına geçin.
Bir terminal (veya Windows’ta Komut İstemi) açın ve aşağıdaki keytool komutunu çalıştırın. Bu komut, PKCS12 biçiminde yeni bir keystore oluşturur, içinde 2048 bit’lik bir RSA anahtar çifti üretir ve anahtarı seçtiğiniz takma ad altında saklar. PKCS12, JDK 9’dan beri varsayılan keystore biçimidir; daha eski olan JKS biçimi kullanımdan kaldırılmıştır ve yeni anahtarlar için kullanılmamalıdır.
keytool -genkeypair
-alias myalias
-keyalg RSA -keysize 2048
-storetype PKCS12
-keystore yoursite.p12
-validity 825
Windows’ta aynı komut tek satırda şu şekilde görünür (dosyayı daha sonra kolayca bulmak için mutlak yolu kullanın):
keytool -genkeypair -alias myalias -keyalg RSA -keysize 2048 -storetype PKCS12 -keystore C:certsyoursite.p12 -validity 825
Parametrelerin işlevleri:
- -alias myalias: keystore içindeki giriş adı. Tanıyabileceğiniz bir etiket seçin ve yazıp not edin. CSR’yi dışa aktarırken ve imzalanan sertifikayı içe aktarırken bu takma adı tam olarak yeniden kullanmanız gerekir.
- -keyalg RSA -keysize 2048: 2048 bit’lik bir RSA anahtarı, her CA’nın kabul ettiği güncel genel asgari değerdir. Daha uzun ömürlü bir anahtar için 3072 bit kullanın veya daha küçük ve hızlı bir anahtar için -keyalg EC -groupname secp256r1 ile bir ECDSA anahtarı oluşturun (her modern CA, ECDSA P-256 ve P-384’e karşı sertifika verir).
- -storetype PKCS12: modern PKCS12 keystore’unu zorunlu kılar. Karşılık gelen uzantı .p12‘dir (veya .pfx).
- -keystore yoursite.p12: oluşturulacak keystore dosyası. Adı hatırlayabileceğiniz bir şeyle değiştirin ve dosyayı güvende tutun: özel anahtarınızı içerir.
- -validity 825: keystore içindeki kendinden imzalı yer tutucu sertifikanın ne kadar süre geçerli olacağı. CA’dan gelen imzalı sertifika bunun yerini daha sonra alır, bu nedenle bu değer üretim ömrünü etkilemez.
keytool ardından bir keystore parolası ister. Güçlü bir parola seçin ve bunu gizli bilgi yöneticinizde saklayın. Sonraki her keytool komutunda ve keystore’u kullanan her sunucuda buna ihtiyacınız olacak. PKCS12 keystore’larında anahtar parolası, keystore parolasıyla aynıdır; yani hatırlanması gereken tek bir parola vardır.
Adım 2: Kuruluş bilgilerinizi girin (DN)
keytool şimdi CSR’de görünecek kimlik alanlarını, yani Distinguished Name (DN)‘yi ister. Her istemi kuruluşunuz için tam yasal değerle yanıtlayın. Yalnızca standart ASCII karakterleri kullanın: Latin dışı harfler talebi bozar. Noktalama işaretleri de önemlidir, çünkü CA değerlerinizi kamuya açık ticari kayıtlarla eşleştirir.
- Adınız ve soyadınız nedir? Bu, keytool’un Common Name (CN) için kullandığı ifadedir. Güvenceye almak istediğiniz tam FQDN‘yi (örneğin www.yoursite.com) veya *.yoursite.com gibi bir joker karakter girin. Bir kişinin adını girmeyin.
- Kuruluş biriminizin adı nedir? CA/Browser Forum, organizationalUnitName özniteliğini 01.09.2022 tarihinde kaldırdı ve genel CA’lar bunu verilen sertifikalardan ayıklıyor. Enter tuşuna basmanın alanı boş bırakmadığını unutmayın: keytool kendi varsayılan değerini kullanır, bu nedenle DN sonunda OU=Unknown taşır ve bu değer CSR’ye girer. Özniteliği gerçekten atlamak için istemleri geçin ve DN’yi -dname ile satır içinde iletin, OU’yu dizeden çıkarın.
- Kuruluşunuzun adı nedir? Şirketinizin tam yasal adını, tam olarak kayıtlı olduğu şekilde girin (örneğin Your Company LLC). OV ve EV sertifikaları için gereklidir; Domain Validation (DV) sertifikalarında bu değer göz ardı edilir, dolayısıyla herhangi bir kısa yer tutucu işe yarar.
- Şehir veya bölgenizin adı nedir? Şirketinizin kayıtlı olduğu şehrin tam adını yazın (örneğin Seattle, SEA değil).
- Eyalet veya ilinizin adı nedir? Eyalet veya ilin tam adını girin (örneğin California, CA değil).
- Bu birim için iki harfli ülke kodu nedir? İki harfli ISO 3166-1 alpha-2 kodunu girin (örneğin US, GB, DE). Emin değilseniz resmi ISO listesine bakın.
keytool oluşturulan DN’yi yazdırır ve CN=…, OU=…, O=…, L=…, ST=…, C=… doğru mu? diye sorar. Onaylamak için yes yazıp Enter tuşuna basın. Bir yazım hatası fark ederseniz no yazın ve keytool istemleri yeniden başlatır.
Adım 3: CSR’yi bir Subject Alternative Name ile dışa aktarın
Şimdi CSR’yi keytool -certreq ile dışa aktarın. Her genel CA, ana bilgisayar adını Common Name’e karşı değil, Subject Alternative Name (SAN) uzantısına karşı doğrular (tarayıcılar ve modern TLS kütüphaneleri yıllar önce CN kontrolünü bıraktı); bu nedenle tek bir ana bilgisayar adı için bile bir SAN ekleyin. Adım 1’de belirlediğiniz aynı takma adı kullanın:
keytool -certreq
-alias myalias
-file certreq.csr
-keystore yoursite.p12
-ext SAN=DNS:www.yoursite.com,DNS:yoursite.com
Windows’ta aynı komut tek satırda:
keytool -certreq -alias myalias -file certreq.csr -keystore C:certsyoursite.p12 -ext SAN=DNS:www.yoursite.com,DNS:yoursite.com
Çok alan adlı bir sertifika için her ana bilgisayar adına bir DNS: girişi ekleyin (bunları virgülle ayırın, boşluk kullanmayın). Joker karakter için DNS:*.yoursite.com kullanın. keytool keystore parolasını ister, ardından CSR’yi geçerli dizininizde certreq.csr olarak yazar.
Adım 4: CSR’yi açın ve CA’ya gönderin
certreq.csr dosyasını herhangi bir metin düzenleyicide açın (Notepad, TextEdit, nano, vim). Ayrıca terminale de yazdırabilirsiniz:
cat certreq.csr
Windows Komut İstemi’nde:
type certreq.csr
Şöyle bir blok göreceksiniz:
-----BEGIN NEW CERTIFICATE REQUEST-----
MIIDXjCCAkYCAQAwgZQxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlh
... (many lines of base64) ...
-----END NEW CERTIFICATE REQUEST-----
Bloğun tamamını, BEGIN NEW CERTIFICATE REQUEST ve END NEW CERTIFICATE REQUEST satırları dahil olmak üzere seçin (bazı CA’lar bunları BEGIN CERTIFICATE REQUEST / END CERTIFICATE REQUEST olarak etiketler: her iki etiket de kabul edilir). Kopyalayın ve sipariş formunuzdaki CSR alanına yapıştırın.
CSR’yi göndermeden önce kontrol edin (isteğe bağlı)
Talebi CA’ya göndermeden önce Common Name, SAN girişleri ve anahtar boyutunu doğrulamakta fayda vardır. keytool, keystore girişine karşı aynı bilgileri yazdırır:
keytool -printcertreq -file certreq.csr
Çevrimiçi bir araç mı tercih ediyorsunuz? Talebin içeriğini SSL Dragon’ın CSR Çözücü aracına yapıştırarak konuyu, SAN listesini ve genel anahtar parametrelerini okuyun. Common Name’in istemcilerin kullanacağı ana bilgisayar adıyla eşleştiğini ve gerekli her adın Subject Alternative Name listesinde göründüğünü doğrulayın.
Android verilen sertifikaya güvenecek mi?
Evet, kamuya güvenilen bir CA tarafından imzalanan her sertifika için. Android, büyük tarayıcı güven listelerini yansıtan bir kök sertifika sistemi deposu sunar; bu nedenle bu köklerden biri altında verilen bir sertifikaya Chrome, WebView ve sistem güven deposunu kullanan her uygulama, ek bir yapılandırma gerektirmeden güvenir.
Sertifikayı (veya özel bir CA kökünü) cihazın kendisine de yüklüyorsanız bilmeniz gereken iki önemli nokta var:
- Kullanıcı tarafından yüklenen CA’lar, Android 7 ve üzeri sürümlerde uygulamalar tarafından göz ardı edilir. Android 7’den (Nougat) beri, varsayılan olarak yalnızca sistem deposu uygulama trafiği tarafından güvenilir kabul edilir ve Google Chrome da kullanıcı tarafından yüklenen CA’ları göz ardı eder. Uygulamanızın özel bir CA’ya güvenmesi gerekiyorsa, geliştirici
<certificates src="user" />içeren bir network security configuration aracılığıyla buna açıkça katılmalıdır. Genel CA sertifikaları buna gerek duymaz: bunlar zaten sistem deposunda bulunur. - Tek bir sertifikaya değil, kararlı bir tanımlayıcıya sabitleyin. Uygulamanızda sertifika sabitleme (pinning) uyguluyorsanız, belirli bir yaprak sertifikaya değil, genel anahtarın SPKI karma değerine veya veren CA’ya sabitleyin. Aksi takdirde bir sonraki yenilemede kullanıcılarınız erişimi kaybedecektir.
Sonraki adımlar
CA, CSR’yi doğruladıktan ve sertifikanızı verdikten sonra, verilen sertifikayı aynı takma ad altında aynı keystore’a geri içe aktarın, ardından keystore’u Android istemcilerinin erişeceği sunucuya dağıtın. Cihaz tarafındaki kurulum adımları için Android SSL kurulum kılavuzumuza veya arka ucunuz Tomcat, JBoss, Nginx ya da başka bir sunucuda çalışıyorsa SSL sertifikası nasıl kurulur bölümündeki platforma özel kurulum kılavuzlarına bakın.
Bugün SSL Dragon’dan sipariş vererek SSL Sertifikalarında %10 indirimden yararlanın!
Hızlı düzenleme, güçlü şifreleme, %99,99 tarayıcı güvenilirliği, özel destek ve 25 günlük para iade garantisi. Kupon kodu: SAVE10


