Share via


Üst düzey uygulamalarda sertifikaları yönetme

CertStore API'si, üst düzey bir uygulamanın ağ kimlik doğrulamasında kullanılmak üzere sertifikaları yönetmesine olanak tanır. az sphere cihaz sertifikası, sertifikaları komut satırından yönetmenize olanak tanır.

Sertifikalar Azure Sphere cihazında geçici olmayan depolama alanında depolanır. Sertifika deposu veya sertifika deposu en fazla 24 KiB sertifika barındırabilir. Bir sertifikanın boyut üst sınırı 8 KiB'dir. Kök CA sertifikaları genellikle istemci sertifikalarından daha büyüktür. Sertifika deposunu kullanmanın yanı sıra, Microsoft tarafından yönetilen istemci sertifikasına da erişebilirsiniz. Microsoft tarafından yönetilen istemci sertifikası yalnızca cihaz en az 24 saatte bir İnternet'e bağlı olduğunda kullanılabilir.

Microsoft tarafından yönetilen istemci sertifikasını kullanma

İstemci sertifikası almak ve kullanıma hazır olup olmadığını belirlemek için bu iki işlevi kullanın.

  • DeviceAuth_GetCertificatePath , işletim sistemi tarafından yönetilen bir istemci sertifikasının dosya yolunu döndürür. Bu dosya yolu, TLS iletişimleri için bir sertifika yüklemek için bazı kitaplıklar tarafından gereklidir.

  • Geçerli uygulama için cihaz kimlik doğrulamasının hazır olup olmadığını doğrulamak için Application_IsDeviceAuthReady.

CertStore gereksinimleri

CertStore API'sini kullanan uygulamaların uygun üst bilgi dosyalarını içermesi ve uygulama bildirimine CertStore özelliğini eklemesi gerekir.

Üst bilgi dosyaları

Projenize CertStore üst bilgisini ekleyin:

 #include <applibs\certstore.h>

Uygulama bildirimi ayarları

Sertifika deposu API'lerini kullanmak için uygulama bildirimine CertStore uygulama özelliğini eklemeniz ve değerini olarak trueayarlamanız gerekir. Azure Sphere uygulama bildirimi konusu, uygulama bildirimi hakkında daha fazla ayrıntıya sahiptir.

{
  "SchemaVersion": 1,
  "Name" : "Mt3620App3",
  "ComponentId" : "bb267cbd-4d2a-4937-8dd8-3603f48cb8f6",
  "EntryPoint": "/bin/app",
  "CmdArgs": [],
   "Capabilities": {
    "AllowedConnections": [],
    "AllowedTcpServerPorts": [],
    "AllowedUdpServerPorts": [],
    "CertStore" : true,
    "Gpio": [],
    "Uart": [],
    "EnterpriseWifiConfig": true,
    "WifiConfig": true,
    "NetworkConfig": false,
    "SystemTime": true
  }
}

Sertifika Kimlikleri

Her sertifika bir sertifika tanımlayıcısı (kimlik) ile ilişkilendirilir. Sertifika kimliği, cihazdaki sertifikayı benzersiz olarak tanımlayan 1-16 karakterlik bir dizedir. Geçerli karakterler : 'a'-'z', 'A'-'Z', '0'-'9', kısa çizgi (-). ve alt çizgi (_). Tanımlamış olduğu sertifika türü ne olursa olsun, her sertifika kimliğinin cihaz genelinde benzersiz olması gerekir.

Her sertifikanın tanımlayıcısı sertifika deposuna kaydedilir ve cihaz genelinde kullanılır: CertStore API' sinde, WifiConfig API'sinde ve Azure CLI uzantısında. Sonuç olarak, komut satırından bir sertifika yüklerseniz, bu sertifikayı sorgulayan, taşıyan veya silecek tüm uygulamalar aynı kimliği kullanmalıdır. Benzer şekilde, bir uygulama sertifikayı yüklerse, sertifikayı işleyen tüm az sphere komutlar aynı kimliği kullanmalıdır. Herhangi bir türdeki mevcut bir sertifikayla aynı kimlikte yeni bir sertifika yüklerseniz, yeni sertifika var olan sertifikanın üzerine yazar.

Dikkat

Sertifika kimlikleri hem istemci hem de Kök CA sertifikaları için sistem genelinde olduğundan, az sphere komutu veya yeni sertifika ekleyen bir işlev çağrısı, önceki bir komut veya işlev çağrısı tarafından eklenen bir sertifikanın üzerine yazabilir ve bu da ağ bağlantısı hatalarına neden olabilir. Net sertifika güncelleştirme yordamları geliştirmenizi ve sertifika kimliklerini dikkatle seçmenizi kesinlikle öneririz.

Sertifika deposuna sertifika ekleme

Bir uygulama, sertifika deposuna sertifika eklemek için aşağıdaki işlevlerden birini çağırır:

  • CertStore_InstallClientCertificate , ortak sertifika ve özel anahtardan oluşan bir istemci sertifikası yükler
  • CertStore_InstallRootCACertificate , ortak sertifikadan oluşan bir Kök CA sertifikası yükler

Uygulamanın yükleyebilmesi için önce sertifikanın cihazda mevcut olması gerekir. Sertifikaların Azure Sphere cihazına yüklenebilmesi için PKCS1 veya PKCS8 söz diziminde ve .pem biçiminde olması gerekir. EAP-TLS ağları için sertifika alma ve dağıtma , sertifikaların nasıl alınıp bir cihaza yüklenip yüklenemediklerinin açıklanmaktadır. Microsoft sertifika sağlamaz.

Sertifikayı yüklemek sertifika deposuna ekler ve kimlik doğrulamasında kullanılabilir hale getirir. Sertifika deposu içinde, sertifikalar dizin tarafından yönetilir ve dizin tarafından alınabilir. Dizin değerleri aralığı 0 ile (CertStore_GetCertificateCount - 1) arasında çalışır.

Uygulama , CertStore_GetCertificateIdentifierAt işlevini çağırarak belirli bir dizindeki sertifikanın kimliğini alabilir. Daha sonra sertifika hakkında bilgi almak, sertifikayı taşımak veya silmek ve kimlik doğrulaması için bir sertifika kullanmak için çağrılarda sertifika kimliğini kullanabilir.

Sertifika bilgilerini alma

CertStore API'sinde depolanan sertifika hakkında bilgi döndüren çeşitli işlevler bulunur:

Önce olmayan ve sonra olmayan zamanlar, sertifika ömrünü ve güncelleştirmeleri yönetmede yararlıdır. Ayrıntılar için bkz. Sertifika yaşam döngüsü ve yenileme .

Sertifikayı yeniden adlandırma veya silme

Bir sertifikayı yeniden adlandırmak veya silmek için uygulama CertStore_MoveCertificate veya CertStore_DeleteCertificate çağırır.

CertStore_MoveCertificate sertifika kimliğini değiştirerek sertifikayı yeniden adlandırır. Sertifika kimliklerinin cihaz genelinde benzersiz olması gerektiğinden, sertifikayı başka bir sertifikayla aynı kimliği vererek yeniden adlandırmak bu sertifikayı siler. Örneğin, sertifika deposu ve içeriyorsaMyCert, önceki MyCertiçindeki verileri içeren kimliğine YourCertsahip tek bir sertifikayla sonuçlanan öğesine taşınır MyCertYourCert.YourCert Hata döndürülmedi.

CertStore_DeleteCertificate tek bir sertifikayı siler. Sertifikanın silinmesi, kalan sertifikaların 0'dan başlayarak yeniden dizine alınmasına neden olur. Bu nedenle, sertifika deposundaki tüm sertifikaları silmek için, sertifika sayısına göre döngü yapmanız, ancak her yinelemede dizin 0'daki sertifikayı silmeniz gerekir. Artık kullanımda olmayan bir dizindeki sertifikayı silmeye çalışırsanız CertStore_GetCertificateIdentifierAt ERANGE döndürür.

Aşağıdaki yöntem düzgün çalışır:

for (int i = 0; i < CertStore_GetCertificateCount(); i++) {
    struct CertStore_Identifier id;
    result = CertStore_GetCertificateIdentifierAt(0, &id);
    CertStore_DeleteCertificate(id.identifier);
}

Ağ kimlik doğrulaması için sertifika kullanma

WifiConfig API'sinde belirli bir Wi-Fi yapılandırması için etkinleştirilen sertifikaları ayarlayan ve döndüren işlevler sağlanır. Üst düzey bir uygulamanın kimlik doğrulaması için sertifika kullanan bir EAP-TLS ağını nasıl ayarlayabildiği hakkında ayrıntılı bilgi için bkz. Bir uygulamada EAP-TLS ağını ayarlama.

Sertifika örneği

Sertifikalar örnek uygulaması, bir uygulamanın CertStore işlevlerini nasıl kullanabileceğini gösterir.