KB5025823 Αλλαγή στον τρόπο εισαγωγής πιστοποιητικών X.509 από εφαρμογές .NET

Ισχύει για
.NET

Σημείωση: Αναθεωρήθηκε στις 22 Ιουνίου 2023 για να ενημερωθεί η ανάλυση και οι λύσεις

Σημείωση: Αναθεωρήθηκε στις 15 Ιουνίου 2023 για να ενημερωθεί η αντιμετώπιση των επιλογών 4 και 5

Ιστορικό

Στις 13 Ιουνίου 2023, η Microsoft κυκλοφόρησε μια ενημέρωση ασφαλείας για το .NET Framework και το .NET που επηρεάζει τον τρόπο με τον οποίο ο χρόνος εκτέλεσης εισάγει πιστοποιητικά X.509. Αυτές οι αλλαγές μπορεί να προκαλέσουν την εισαγωγή πιστοποιητικού X.509 να ρίξει το CryptographicException σε σενάρια όπου η εισαγωγή θα είχε ολοκληρωθεί με επιτυχία πριν από την ενημέρωση.

Αυτό το έγγραφο περιγράφει την αλλαγή και τις διαθέσιμες λύσεις για τις επηρεαζόμενες εφαρμογές.

Επηρεαζόμενο λογισμικό

  • .NET Framework 2.0
  • .NET Framework 4.6.2, 4.7, 4.7.1, 4.7.2
  • .NET Framework 4.8
  • .NET Framework 4.8.1
  • .NET 6.0
  • .NET 7.0

API που επηρεάζονται

Περιγραφή αλλαγής

Πριν από την αλλαγή της 13ης Ιουνίου 2023, όταν παρουσιάζεται στο .NET Framework και στο .NET ένα δυαδικό αντικείμενο πιστοποιητικού για εισαγωγή, το .NET Framework και .NET συνήθως αναθέτει την επικύρωση και την εισαγωγή του αντικειμένου blob στο υποκείμενο λειτουργικό σύστημα. Για παράδειγμα, στα Windows, το .NET Framework και το .NET συνήθως βασίζονται στο API PFXImportCertStore για επικύρωση και εισαγωγή.

Από την αλλαγή της 13ης Ιουνίου 2023, όταν το .NET Framework και το .NET παρουσιάζονται με ένα δυαδικό blob πιστοποιητικού για εισαγωγή, .NET Framework και .NET θα εκτελεί σε ορισμένες περιπτώσεις πρόσθετη επικύρωση πριν από την παράδοση του blob στο υποκείμενο λειτουργικό σύστημα. Αυτή η πρόσθετη επικύρωση εκτελεί μια σειρά ευρετικών ελέγχων για να προσδιορίσει εάν το εισερχόμενο πιστοποιητικό θα εξαντλήσει κακόβουλα πόρους κατά την εισαγωγή. Δεδομένου ότι πρόκειται για πρόσθετη επικύρωση πέρα από αυτό που θα εκτελούσε κανονικά το υποκείμενο λειτουργικό σύστημα, ενδέχεται να αποκλείσει σταγόνες πιστοποιητικών που θα είχαν εισαχθεί με επιτυχία πριν από την αλλαγή της 13ης Ιουνίου 2023.

Γνωστές παλινδρομήσεις

  1. Εάν ένα πιστοποιητικό X.509 έχει εξαχθεί ως αντικείμενο blob PFX με χρήση ασυνήθιστα υψηλού αριθμού επαναλήψεων κωδικού πρόσβασης, η εισαγωγή αυτού του πιστοποιητικού ενδέχεται πλέον να αποτύχει. Οι περισσότερες εγκαταστάσεις εξαγωγής πιστοποιητικών χρησιμοποιούν έναν αριθμό διαδοχικών προσεγγίσεων μεταξύ 2.000 - 10.000. Μετά την εφαρμογή της ενημέρωσης ασφαλείας, η εισαγωγή θα αποτύχει για πιστοποιητικά που περιέχουν αριθμό επαναλήψεων μεγαλύτερο από 600.000.

  2. Εάν ένα πιστοποιητικό X.509 έχει εξαχθεί με χρήση μηδενικού κωδικού πρόσβασης [π.χ., μέσω X509Certificate.Export(X509ContentType.Pfx, (string)null) ή χωρίς X509Certificate.Export(X509ContentType.Pfx)]κωδικό πρόσβασης], αυτό το πιστοποιητικό ενδέχεται τώρα να μην εισαχθεί.
     

    Σημείωση

    Η παραπάνω παλινδρόμηση έχει αντιμετωπιστεί στην ενημέρωση της 22ας Ιουνίου 2023 που συζητήθηκε στο KB5028608.

  3. Εάν ένα πιστοποιητικό X.509 έχει εξαχθεί ως αντικείμενο blob PFX χρησιμοποιώντας τη δυνατότητα των Windows να προστατεύουν το ιδιωτικό κλειδί σε ένα SID, αυτό το πιστοποιητικό ενδέχεται τώρα να μην εισαχθεί. Αυτό θα επηρεάσει τα αντικείμενα blob PFX που δημιουργούνται με τους ακόλουθους τρόπους:

    • Μέσω του Οδηγού εξαγωγής πιστοποιητικού των Windows και καθορίζοντας στον οδηγό ότι το ιδιωτικό κλειδί πρέπει να προστατεύεται σε έναν χρήστη τομέα. ή
    • Μέσω του cmdlet Export-PfxCertificate του PowerShell όπου παρέχεται ένα ρητό -ProtectTo όρισμα ή
    • Μέσω του βοηθητικού προγράμματος certutil όπου παρέχεται ένα ρητό -protectto όρισμα, ή
    • Μέσω του API PFXExportCertStoreEx όπου παρέχεται η σημαία PKCS12_PROTECT_TO_DOMAIN_SIDS.

Λύσεις & λύσεις

Υπάρχουν διάφορες λύσεις, ανάλογα με το αν θέλετε να κάνετε στοχευμένες αλλαγές σε μεμονωμένες τοποθεσίες κλήσεων εντός του κώδικά σας, θέλετε να αλλάξετε τη συμπεριφορά μιας μεμονωμένης εφαρμογής ή θέλετε να κάνετε αλλαγές σε ολόκληρο τον υπολογιστή.

Επιλογή 1 (προτιμώμενη) - Εγκαταστήστε μια ενημερωμένη ενημερωμένη έκδοση κώδικα

Σημείωση

Αυτή είναι η προτιμώμενη επιλογή, δεδομένου ότι αντιμετωπίζει παλινδρομήσεις πελατών που αναφέρονται συχνά και δεν απαιτεί αλλαγές κώδικα στην εφαρμογή.

Δυνατότητα εφαρμογής: Αυτή η επιλογή ισχύει για όλες τις εκδόσεις του .NET Framework και του .NET.

Αυτό το ζήτημα έχει αντιμετωπιστεί στην ενημέρωση της 22ας Ιουνίου 2023 που συζητήθηκε στο KB5028608.

Η Microsoft συνιστά στους πελάτες που αντιμετωπίζουν παλινδρομήσεις που παρουσιάστηκαν με την έκδοση της 13ης Ιουνίου 2023 να δοκιμάσουν να εγκαταστήσουν αυτήν την ενημερωμένη ενημέρωση κώδικα πριν επιχειρήσουν τις λύσεις που αναφέρονται παρακάτω σε αυτό το έγγραφο.

Επιλογή 2 - Τροποποίηση της τοποθεσίας κλήσης

Δυνατότητα εφαρμογής: Αυτή η επιλογή ισχύει για όλες τις εκδόσεις του .NET Framework και του .NET.

Εξετάστε εάν το αντικείμενο blob που εισάγετε είναι αξιόπιστο. Για παράδειγμα, το αντικείμενο blob ανακτήθηκε από μια αξιόπιστη θέση, όπως μια βάση δεδομένων ή ένα αρχείο ρύθμισης παραμέτρων υπό τον έλεγχό σας, ή παρασχέθηκε μέσω μιας αίτησης δικτύου που υποβλήθηκε από έναν υπολογιστή-πελάτη χωρίς έλεγχο ταυτότητας ή χωρίς δικαιώματα;

Η Microsoft συνιστά ιδιαίτερα να μην εισαγάγετε αντικείμενα blob PFX που σας παρέχονται από προγράμματα-πελάτες χωρίς έλεγχο ταυτότητας ή χωρίς δικαιώματα, καθώς αυτά τα blob μπορεί να περιέχουν συμπεριφορές εξάντλησης κακόβουλων πόρων.

Εάν πρέπει να εισαγάγετε ένα αντικείμενο blob πιστοποιητικού δημόσιου κλειδιού που σας έχει δοθεί από ένα μη αξιόπιστο μέρος, μπορείτε να χρησιμοποιήσετε τον παρακάτω κώδικα για να εισαγάγετε με ασφάλεια ένα τέτοιο blob. Αυτό το δείγμα κώδικα χρησιμοποιεί τη μέθοδο GetCertContentType για να προσδιορίσει ποιος είναι ο υποκείμενος τύπος του αντικειμένου blob πιστοποιητικού και απορρίπτει τα αντικείμενα blob PFX σε περιπτώσεις όπου αναμένετε να εισαγάγετε μόνο ένα αντικείμενο blob πιστοποιητικού δημόσιου κλειδιού. Ο X509Certificate2(byte[]) κατασκευαστής είναι ασφαλής για χρήση όταν του παρέχονται μη αξιόπιστα blob που δεν είναι PFX.


using System.Security.Cryptography.X509Certificates;
public static X509Certificate2 ImportPublicCertificateBlob(byte[] blob)
{
     if (X509Certificate2.GetCertContentType(blob) == X509ContentType.Pfx)
    {
          throw new Exception("PFX blobs are disallowed.");
    }
   else
   {
         // Import only after we have confirmed it's not a PFX.
        return new X509Certificate2(blob);
    }
} 

Εάν πρέπει να εισαγάγετε ένα blob πιστοποιητικού ιδιωτικού κλειδιού χωρίς κωδικό πρόσβασης και έχετε προσδιορίσει ότι το blob είναι αξιόπιστο, μπορείτε να αποκρύψετε τους πρόσθετους ελέγχους επικύρωσης που πραγματοποιήθηκαν από την έκδοση ασφαλείας της 13ης Ιουνίου 2023, καλώντας έναν διαφορετικό κατασκευαστή σε υπερφόρτωση. Για παράδειγμα, μπορείτε να καλέσετε υπερφόρτωση της κατασκευής, η οποία αποδέχεται ένα όρισμα συμβολοσειρά κωδικού πρόσβασης και να περάσει null για την τιμή του ορίσματος.

byte[] blobToImport = GetBlobToImport(); // fetch this from a database, config, etc. 

// REGRESSION - byte[] ctor performs additional security checks X509Certificate2 certA = new X509Certificate2(blobToImport);

// RECOMMENDED WORKAROUND - different ctor overload suppresses additional security checks X509Certificate2 certB = new X509Certificate2(blobToImport, (string)null);

Επιλογή 3 - Τροποποίηση ή κατάργηση της πρόσθετης επικύρωσης με χρήση μεταβλητής περιβάλλοντος

Δυνατότητα εφαρμογής: Αυτή η επιλογή ισχύει μόνο για όλες τις εκδόσεις του .NET Framework.  Αυτό δεν ισχύει για το .NET 6.0+.

Ενώ .NET Framework από προεπιλογή περιορίζει τις λειτουργίες εισαγωγής ώστε να μην λαμβάνουν περισσότερες από 600.000 διαδοχικές προσεγγίσεις ενός κωδικού πρόσβασης, αυτό το όριο μπορεί να ρυθμιστεί σε ολόκληρη την εφαρμογή ή σε ολόκληρη τη μηχανή χρησιμοποιώντας μια μεταβλητή περιβάλλοντος. Αυτό το νέο όριο θα ισχύει για όλες τις κλήσεις των επηρεαζόμενων API που αναφέρονται παραπάνω.

Για να αλλάξετε το όριο, ορίστε τη μεταβλητή COMPlus_Pkcs12UnspecifiedPasswordIterationLimit περιβάλλοντος στην τιμή του νέου ορίου. Για παράδειγμα, για να ορίσετε το όριο σε 1.000.000 (ένα εκατομμύριο) διαδοχικές προσεγγίσεις, ορίστε τη μεταβλητή περιβάλλοντος όπως φαίνεται παρακάτω.

  • Αυτός ο αριθμός ελέγχει το συνολικό όριο διαδοχικών προσεγγίσεων, το οποίο είναι το άθροισμα του πλήθους διαδοχικών προσεγγίσεων MAC, των κρυπτογραφημένων ασφαλών περιεχομένων και του πλήθους διαδοχικών προσεγγίσεων της σακούλας. Εάν έχετε εξαγάγει χειροκίνητα ένα PFX χρησιμοποιώντας ένα ρητό πλήθος <επαναλήψεων iter_count> (π.χ., μέσω openssl pkcs12 -export -iter <iter_count>) και θέλετε να εισαγάγετε αυτό το αντικείμενο blob PFX, ορίστε αυτήν τη μεταβλητή περιβάλλοντος σε μια τιμή τουλάχιστον τόσο μεγάλη όσο το άθροισμα όλων των αναμενόμενων επαναλήψεων. Στην πράξη, το .NET Framework και το .NET ενδέχεται να επιτρέπουν στο συνολικό πλήθος διαδοχικών προσεγγίσεων να υπερβαίνει ελαφρώς οποιοδήποτε ρητό όριο που έχει ρυθμιστεί εδώ.

COMPlus_Pkcs12UnspecifiedPasswordIterationLimit=1000000

Για να αποκρύψετε εντελώς τους πρόσθετους ελέγχους, ορίστε τη μεταβλητή περιβάλλοντος στην ειδική τιμή φρουρού -1, όπως φαίνεται παρακάτω.

  • ⚠️ Προειδοποίηση: Ορίστε τη μεταβλητή τιμή περιβάλλοντος σε -1 μόνο εάν είστε βέβαιοι ότι η εφαρμογή προορισμού δεν χειρίζεται μη αξιόπιστη εισαγωγή πιστοποιητικού.

COMPlus_Pkcs12UnspecifiedPasswordIterationLimit=-1

Επιλογή 4 - Τροποποίηση ή απόκρυψη της πρόσθετης επικύρωσης με χρήση του AppContext

Δυνατότητα εφαρμογής: Αυτή η επιλογή ισχύει μόνο για το .NET 6.0+.  Δεν ισχύει για .NET Framework

Ενώ το .NET περιορίζει από προεπιλογή τις λειτουργίες εισαγωγής ώστε να μην λαμβάνουν περισσότερες από 600.000 επαναλήψεις ενός κωδικού πρόσβασης, αυτό το όριο μπορεί να ρυθμιστεί σε ολόκληρη την εφαρμογή χρησιμοποιώντας τον διακόπτη AppContext. Αυτό το νέο όριο θα ισχύει για όλες τις κλήσεις των επηρεαζόμενων API που αναφέρονται παραπάνω.

Για να αλλάξετε το όριο, ορίστε τον διακόπτη AppContext System.Security.Cryptography.Pkcs12UnspecifiedPasswordIterationLimit στην τιμή του νέου ορίου. Για παράδειγμα, για να ορίσετε το όριο σε 1.000.000 (ένα εκατομμύριο) διαδοχικές προσεγγίσεις, ορίστε την αλλαγή όπως φαίνεται παρακάτω.

  • Αυτός ο αριθμός ελέγχει το συνολικό όριο διαδοχικών προσεγγίσεων, το οποίο είναι το άθροισμα του πλήθους διαδοχικών προσεγγίσεων MAC, των κρυπτογραφημένων ασφαλών περιεχομένων και του πλήθους διαδοχικών προσεγγίσεων της σακούλας. Εάν έχετε εξαγάγει χειροκίνητα ένα PFX χρησιμοποιώντας ένα ρητό πλήθος <επαναλήψεων iter_count> (π.χ., μέσω openssl pkcs12 -export -iter <iter_count>) και θέλετε να εισαγάγετε αυτό το αντικείμενο blob PFX, ορίστε αυτήν τη μεταβλητή περιβάλλοντος σε μια τιμή τουλάχιστον τόσο μεγάλη όσο το άθροισμα όλων των αναμενόμενων επαναλήψεων. Στην πράξη, το .NET μπορεί να επιτρέψει στο συνολικό πλήθος διαδοχικών προσεγγίσεων να υπερβεί ελαφρώς οποιοδήποτε ρητό όριο που έχει ρυθμιστεί εδώ.

Για να ορίσετε τον διακόπτη μέσα στο αρχείο έργου της εφαρμογής σας (.csproj ή .vbproj):

<!--

  • Αυτός ο διακόπτης λειτουργεί μόνο εάν το τρέχον αρχείο έργου αντιπροσωπεύει μια εφαρμογή. Δεν έχει κανένα αποτέλεσμα εάν το τρέχον αρχείο έργου αντιπροσωπεύει μια κοινόχρηστη βιβλιοθήκη.

-->

<ItemGroup>

  • <RuntimeHostConfigurationOption include="System.Security.Cryptography.Pkcs12UnspecifiedPasswordIterationLimit" value="1000000" />

</ItemGroup>

Εναλλακτικά, μπορείτε να τοποθετήσετε ένα αρχείο με όνομα runtimeconfig.template.json με τα ακόλουθα περιεχόμενα στον ίδιο κατάλογο που περιέχει το αρχείο έργου της εφαρμογής σας:

{

     "configProperties": {

  • "System.Security.Cryptography.Pkcs12UnspecifiedPasswordIterationLimit": 1000000

      }

}

Για περισσότερες πληροφορίες σχετικά με την αλλαγή των ρυθμίσεων παραμέτρων του χρόνου εκτέλεσης .NET, ανατρέξτε στη σελίδα τεκμηρίωσης Ρυθμίσεις παραμέτρων χρόνου εκτέλεσης .NET.

Για να αποκρύψετε εντελώς τους πρόσθετους ελέγχους, ορίστε τον διακόπτη ρύθμισης παραμέτρων της ειδικής τιμής φρουρού -1, όπως φαίνεται παρακάτω.

⚠️ Προειδοποίηση: Ορίστε το διακόπτη AppContext σε -1 μόνο εάν είστε βέβαιοι ότι η εφαρμογή προορισμού δεν χειρίζεται μη αξιόπιστη εισαγωγή πιστοποιητικού.

Εντός του αρχείου έργου της εφαρμογής (.csproj ή .vbproj):

<!--

  • Αυτός ο διακόπτης λειτουργεί μόνο εάν το τρέχον αρχείο έργου αντιπροσωπεύει μια εφαρμογή. Δεν έχει κανένα αποτέλεσμα εάν το τρέχον αρχείο έργου αντιπροσωπεύει μια κοινόχρηστη βιβλιοθήκη.

-->

<ItemGroup>

  • <RuntimeHostConfigurationOption include="System.Security.Cryptography.Pkcs12UnspecifiedPasswordIterationLimit" value="-1" />

</ItemGroup>

Ή μέσα στο αρχείο runtimeconfig.template.json:

{

  • "configProperties": {
  • "System.Security.Cryptography.Pkcs12UnspecifiedPasswordIterationLimit": -1

     }

}

Επιλογή 5 - Τροποποίηση ή απόκρυψη της πρόσθετης επικύρωσης σε ολόκληρο τον υπολογιστή μέσω του μητρώου (μόνο για .NET Framework Windows)

Δυνατότητα εφαρμογής: Αυτή η επιλογή ισχύει μόνο για όλες τις εκδόσεις του .NET Framework.  Αυτό δεν ισχύει για το .NET 6.0+.

Ενώ .NET Framework από προεπιλογή περιορισμό των λειτουργιών εισαγωγής ώστε να μην λαμβάνουν περισσότερες από 600.000 επαναλήψεις ενός κωδικού πρόσβασης, αυτό το όριο μπορεί να ρυθμιστεί σε ολόκληρο τον υπολογιστή χρησιμοποιώντας το μητρώο HKLM. Αυτό το νέο όριο θα ισχύει για όλες τις κλήσεις των επηρεαζόμενων API που αναφέρονται παραπάνω.

Για να αλλάξετε το όριο, κάτω από το κλειδί HKLM\Software\Microsoft\.NETFrameworkμητρώου , ορίστε την τιμή Pkcs12UnspecifiedPasswordIterationLimit στο νέο όριο. Για παράδειγμα, για να ορίσετε το όριο σε 1.000.000 (ένα εκατομμύριο) διαδοχικές προσεγγίσεις, εκτελέστε τις εντολές που εμφανίζονται παρακάτω από μια γραμμή εντολών με αναβαθμισμένα δικαιώματα.

  • Αυτός ο αριθμός ελέγχει το συνολικό όριο διαδοχικών προσεγγίσεων, το οποίο είναι το άθροισμα του πλήθους διαδοχικών προσεγγίσεων MAC, των κρυπτογραφημένων ασφαλών περιεχομένων και του πλήθους διαδοχικών προσεγγίσεων της σακούλας. Εάν έχετε εξαγάγει με μη αυτόματο τρόπο ένα PFX χρησιμοποιώντας μια ρητή iter_count επαναλήψεων <(π.χ., μέσω openssl pkcs12 -export -iter <iter_count>) και θέλετε να εισαγάγετε αυτό το αντικείμενο blob PFX, ορίστε αυτή την τιμή μητρώου σε μια τιμή τουλάχιστον τόσο μεγάλη όσο το άθροισμα όλων των αναμενόμενων επαναλήψεων.> Στην πράξη, .NET Framework μπορεί να επιτρέψει στο συνολικό πλήθος διαδοχικών προσεγγίσεων να υπερβεί ελαφρώς οποιοδήποτε ρητό όριο που έχει ρυθμιστεί εδώ.
  • Η ρύθμιση μητρώου εξαρτάται από την αρχιτεκτονική. Για να εξασφαλίσετε ότι οι εφαρμογές τηρούν τη ρυθμισμένη τιμή σας ανεξάρτητα από την αρχιτεκτονική προορισμού τους, θυμηθείτε να τροποποιήσετε το μητρώο 32 bit και το μητρώο 64 bit, όπως φαίνεται παρακάτω.

reg add "HKLM\Software\Microsoft\.NETFramework" /v Pkcs12UnspecifiedPasswordIterationLimit /t REG_DWORD /d 1000000 /reg:32
reg add "HKLM\Software\Microsoft\.NETFramework" /v Pkcs12UnspecifiedPasswordIterationLimit /t REG_DWORD /d 1000000 /reg:64

Για να αποκρύψετε εντελώς τους πρόσθετους ελέγχους, ορίστε την τιμή μητρώου σε -1 από μια γραμμή εντολών με αναβαθμισμένα δικαιώματα, όπως φαίνεται παρακάτω.

  • ⚠️ Προειδοποίηση: Ορίστε την τιμή μητρώου σε -1 μόνο εάν είστε βέβαιοι ότι οι υπηρεσίες που εκτελούνται στον υπολογιστή προορισμού δεν χειρίζονται μη αξιόπιστη εισαγωγή πιστοποιητικών.
  • Για να ορίσετε τον φρουρό -1, χρησιμοποιήστε τον τύπο REG_SZ αντί για τον τύπο REG_DWORD. Η ρύθμιση μητρώου εξαρτάται από την αρχιτεκτονική. Για να εξασφαλίσετε ότι οι εφαρμογές τηρούν τη ρυθμισμένη τιμή σας ανεξάρτητα από την αρχιτεκτονική προορισμού τους, θυμηθείτε να τροποποιήσετε το μητρώο 32 bit και το μητρώο 64 bit, όπως φαίνεται παρακάτω.

reg add "HKLM\Software\Microsoft\.NETFramework" /v Pkcs12UnspecifiedPasswordIterationLimit /t REG_SZ /d -1 /reg:32
reg add "HKLM\Software\Microsoft\.NETFramework" /v Pkcs12UnspecifiedPasswordIterationLimit /t REG_SZ /d -1 /reg:64

Για να επαναφέρετε τις αλλαγές στο μητρώο, διαγράψτε την τιμή μητρώου Pkcs12UnspecifiedPasswordIterationLimit από μια γραμμή εντολών με αναβαθμισμένα δικαιώματα.

reg delete "HKLM\Software\Microsoft\.NETFramework" /v Pkcs12UnspecifiedPasswordIterationLimit /reg:32
reg delete "HKLM\Software\Microsoft\.NETFramework" /v Pkcs12UnspecifiedPasswordIterationLimit /reg:64

Σημειώσεις ειδικά για τα Windows

Στα Windows, .NET Framework εισαγωγή πιστοποιητικών μέσω της συνάρτησης PFXImportCertStore. Αυτή η συνάρτηση εκτελεί τη δική της επικύρωση, τοποθετώντας τα δικά της όρια στο μέγιστο επιτρεπόμενο πλήθος διαδοχικών προσεγγίσεων ενός αντικειμένου blob PFX. Αυτοί οι έλεγχοι θα εξακολουθήσουν να πραγματοποιούνται κατά την εισαγωγή PFX. Το . Οι μεταβλητές περιβάλλοντος και τα κλειδιά μητρώου που περιγράφονται παραπάνω δεν επηρεάζουν τον τρόπο με τον οποίο το PFXImportCertStore εκτελεί αυτούς τους ελέγχους.