diff --git a/src/java.security.jgss/share/classes/sun/security/krb5/Config.java b/src/java.security.jgss/share/classes/sun/security/krb5/Config.java
index 16700e9157e..256e39dd4d9 100644
--- a/src/java.security.jgss/share/classes/sun/security/krb5/Config.java
+++ b/src/java.security.jgss/share/classes/sun/security/krb5/Config.java
@@ -31,7 +31,6 @@
 package sun.security.krb5;
 
 import java.io.*;
-import java.nio.file.DirectoryStream;
 import java.nio.file.Files;
 import java.nio.file.Paths;
 import java.nio.file.Path;
@@ -43,6 +42,7 @@ import java.security.AccessController;
 import java.security.PrivilegedExceptionAction;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+import java.util.stream.Stream;
 
 import jdk.internal.util.OperatingSystem;
 import sun.net.dns.ResolverConfiguration;
@@ -610,9 +610,8 @@ public class Config {
                 } else if (line.startsWith("includedir ")) {
                     Path dir = Paths.get(
                             line.substring("includedir ".length()).trim());
-                    try (DirectoryStream<Path> files =
-                                 Files.newDirectoryStream(dir)) {
-                        for (Path p: files) {
+                    try (Stream<Path> files = Files.list(dir)) {
+                        for (Path p: files.sorted().toList()) {
                             if (Files.isDirectory(p)) continue;
                             String name = p.getFileName().toString();
                             if (name.matches("[a-zA-Z0-9_-]+") ||
diff --git a/test/jdk/sun/security/krb5/config/IncludeDirOrder.java b/test/jdk/sun/security/krb5/config/IncludeDirOrder.java
new file mode 100644
index 00000000000..da8a98677c2
--- /dev/null
+++ b/test/jdk/sun/security/krb5/config/IncludeDirOrder.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8309356
+ * @summary Read files in includedir in alphanumeric order
+ * @modules java.security.jgss/sun.security.krb5
+ * @library /test/lib
+ * @run main/othervm IncludeDirOrder
+ */
+
+import jdk.test.lib.Asserts;
+import sun.security.krb5.Config;
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.Collections;
+import java.util.Random;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
+
+public class IncludeDirOrder {
+    public static void main(String[] args) throws Exception {
+        long seed = new Random().nextLong();
+        System.out.println("Seed is " + seed);
+        Random random = new Random(seed);
+        Path xdir = Path.of("x");
+        Files.writeString(Path.of("main.conf"), String.format("""
+                includedir %s
+                [libdefaults]
+                default_realm = K
+                """, xdir.toAbsolutePath()));
+        Files.createDirectory(xdir);
+        var list = IntStream.range(10, 20).boxed().collect(Collectors.toList());
+        Collections.shuffle(list, random);
+        for (var i : list) {
+            write(xdir, i);
+        }
+        // K10 should always be read first
+        System.setProperty("java.security.krb5.conf", "main.conf");
+        Asserts.assertEQ(Config.getInstance().getDefaultRealm(), "K10");
+    }
+
+    static void write(Path xdir, int realm) throws IOException {
+        Files.writeString(xdir.resolve("K" + realm), String.format("""
+                [libdefaults]
+                default_realm = K%d
+                """, realm));
+    }
+}