I tried to reproduce the same in my environment and got below results:
I have one certificate named sricert
in my Azure Key Vault like below:

Now I registered one Azure AD application and added same certificate in it like below:

Make sure to add and grant admin consent to below API permission
that is required to create Azure AD application:

Now I ran below c# code that fetches certificate from Azure key vault and creates new Azure AD application using Microsoft.Graph
package via existing service principal like below:
using Azure.Identity;
using Azure.Security.KeyVault.Certificates;
using Azure.Security.KeyVault.Secrets;
using Microsoft.Graph;
using Microsoft.Identity.Client;
using System;
using System.Net.Http.Headers;
using System.Security.Cryptography.X509Certificates;
using System.Threading.Tasks;
namespace ConsoleApp1
{
class Program
{
static async Task Main(string[] args)
{
string tenantId = "58e70374-11f2-4e91-af40-xxxxxxxxx";
string clientId = "cd88c0ed-30e9-4624-bfc6-xxxxxxxx";
string certificateName = "sricert";
string keyVaultUri = $"https://srikeyv.vault.azure.net/";
// Authenticate with Azure Key Vault and obtain an access token
var credential = new DefaultAzureCredential();
var certClient = new CertificateClient(new Uri(keyVaultUri), credential);
var cert = await certClient.GetCertificateAsync(certificateName);
var secretClient = new SecretClient(new Uri(keyVaultUri), credential);
var secret = await secretClient.GetSecretAsync(cert.Value.Name, cert.Value.Properties.Version);
var certificateBytes = Convert.FromBase64String(secret.Value.Value);
var certificate = new X509Certificate2(certificateBytes);
var app = ConfidentialClientApplicationBuilder
.Create(clientId)
.WithAuthority($"https://login.microsoftonline.com/{tenantId}")
.WithCertificate(certificate)
.Build();
var scopes = new[] { "https://graph.microsoft.com/.default" };
var result = await app.AcquireTokenForClient(scopes).ExecuteAsync();
var accessToken = result.AccessToken;
// Create a new Azure AD application using the Microsoft Graph API
var graphClient = new GraphServiceClient(new DelegateAuthenticationProvider((requestMessage) =>
{
requestMessage.Headers.Authorization = new AuthenticationHeaderValue("bearer", accessToken);
return Task.FromResult(0);
}));
var application = new Application
{
DisplayName = "Sri GraphSP",
SignInAudience = "AzureADMyOrg",
PublicClient = new Microsoft.Graph.PublicClientApplication
{
RedirectUris = new[] { "https://jwt.ms" },
},
};
await graphClient.Applications
.Request()
.AddAsync(application);
Console.WriteLine("New Azure AD application created successfully");
}
}
}
Response:

To confirm that, I checked the same in Azure Portal where new Azure AD application named Sri GraphSP
created successfully like below:
