I’m trying to use this sample code because my kubernetes replica set of Kestrel servers needs to share the session cookie database. I have a basic ASP.NET Core 3 C# web-app.
I used the Azure cli to
- Create a storage account
- Create a blob storage container inside that account
- Recorded the storage account key
- I could not find the command to create an empty blob and discovered that if I upload one, they are created on demand
- I created a key vault and was able to fetch a key vault key.
Here is my code inside the ConfigureServices function:
WriteLine("Begin ConfigureServices");
var redisName = GetEnvironmentVariable(name: "REDIS_DNS_NAME", "my-redis-master.default.svc.cluster.local");
var redisPassword = GetEnvironmentVariable(name: "REDIS_PASSWORD", "xxxxxxxxxxx");
var settings = Configuration.GetSection("DataProtection").Get<DataProtectionSettings>();
WriteLine($"settings={settings}");
WriteLine($"AddDataProtection");
services.AddDataProtection() ;
// Replicates PersistKeysToAzureBlobStorage
// There is no overload to give it the func it ultimately uses
// We need to do that so that we can get refreshed tokens when needed
services.Configure<KeyManagementOptions>(options =>
{ // https://joonasw.net/view/using-azure-key-vault-and-azure-storage-for-asp-net-core-data-protection-keys
options.XmlRepository = new AzureBlobXmlRepository(() =>
{
WriteLine($"new AzureBlobXmlRepository: settings={settings}");
// This func is called every time before getting the blob and before modifying the blob
// Get access token for Storage
// User / managed identity needs Blob Data Contributor on the Storage Account (container was not enough)
string accessToken = _tokenProvider.GetAccessTokenAsync("https://storage.azure.com/", tenantId: settings.AadTenantId)
.GetAwaiter()
.GetResult();
WriteLine("Create blob reference with token: new Microsoft.Azure.Storage.Auth.TokenCredential(accessToken)");
var tokenCredential = new Microsoft.Azure.Storage.Auth.TokenCredential(accessToken);
WriteLine("new Microsoft.Azure.Storage.Auth.StorageCredentials(tokenCredential)");
var storageCredentials = new Microsoft.Azure.Storage.Auth.StorageCredentials(tokenCredential);
var uris = $"https://{settings.StorageAccountName}.blob.core.windows.net/{settings.StorageKeyContainerName}/{settings.StorageKeyBlobName}";
WriteLine($"new Uil({uris})");
var uri = new Uri(uris);
WriteLine($"uri={uri}");
// Note this func is expected to return a new instance on each call
WriteLine($"new Microsoft.Azure.Storage.Blob.CloudBlockBlob(uri, storageCredentials);");
var blob = new Microsoft.Azure.Storage.Blob.CloudBlockBlob(uri, storageCredentials);
return blob;
});
});
After looking at the log (see below), it looks I’m dying on that call _tokenProvider.GetAccessTokenAsync(...)
because I’m not supplying a connection string but I don’t see a connection string parameter for that function where I might specify a connection string. I’m not sure what this would be a connection string to…
I see I can get a connection string with
az.cmd storage account show-connection-string -g $AZ_RESOURCE_GROUP_NAME -n $AZ_STORAGE_ACCOUNT
Is this what it wants? Where do I add it to the code?
I can also use this to create a connection string:
az.cmd storage account show-connection-string --blob-endpoint $AZ_ASPNETCORE_BLOB_NAME -g $AZ_RESOURCE_GROUP_NAME -n $AZ_STORAGE_ACCOUNT
Here are the results from the pod log:
settings=AadTenantId=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx StorageAccountName=acctstoragexxxxx StorageKeyContainerName=dataprotection StorageKeyBlobName=keys.xml KeyVaultKeyId=https://keyvaultname.vault.azure.net/keys/keyvaultkey/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
AddDataProtection
new AzureBlobXmlRepository: settings=AadTenantId=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx StorageAccountName=acctstoragexxxxx StorageKeyContainerName=dataprotection StorageKeyBlobName=keys.xml KeyVaultKeyId=https://keyvaultname.vault.azure.net/keys/keyvaultkey/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
[41m[30mfail[39m[22m[49m: Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingProvider[48]
An error occurred while reading the key ring.
Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProviderException: Parameters: Connection String: [No connection string specified], Resource: https://storage.azure.com/, Authority: https://login.microsoftonline.com/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx. Exception Message: Tried the following 3 methods to get an access token, but none of them worked.
Parameters: Connection String: [No connection string specified], Resource: https://storage.azure.com/, Authority: https://login.microsoftonline.com/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx. Exception Message: Tried to get token using Managed Service Identity. Access token could not be acquired. Received a non-retryable error. MSI ResponseCode: BadRequest, Response: {"error":"invalid_request","error_description":"Identity not found"}
Parameters: Connection String: [No connection string specified], Resource: https://storage.azure.com/, Authority: https://login.microsoftonline.com/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx. Exception Message: Tried to get token using Visual Studio. Access token could not be acquired. Environment variable LOCALAPPDATA not set.
Parameters: Connection String: [No connection string specified], Resource: https://storage.azure.com/, Authority: https://login.microsoftonline.com/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx. Exception Message: Tried to get token using Azure CLI. Access token could not be acquired.
at Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProvider.GetAuthResultAsyncImpl(String resource, String authority, Boolean forceRefresh, CancellationToken cancellationToken)
at Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProvider.GetAccessTokenAsync(String resource, String tenantId, Boolean forceRefresh, CancellationToken cancellationToken)
at WebApp_OpenIDConnect_DotNet.Startup.<>c__DisplayClass5_0.<ConfigureServices>b__5() in /src/Client/Startup.cs:line 120
at Microsoft.AspNetCore.DataProtection.AzureStorage.AzureBlobXmlRepository.CreateFreshBlobRef()
at Microsoft.AspNetCore.DataProtection.AzureStorage.AzureBlobXmlRepository.GetAllElements()
at Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager.GetAllKeys()
at Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingProvider.CreateCacheableKeyRingCore(DateTimeOffset now, IKey keyJustAdded)
at Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingProvider.Microsoft.AspNetCore.DataProtection.KeyManagement.Internal.ICacheableKeyRingProvider.GetCacheableKeyRing(DateTimeOffset now)
at Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingProvider.GetCurrentKeyRingCore(DateTime utcNow, Boolean forceRefresh)
[40m[32minfo[39m[22m[49m: Microsoft.AspNetCore.DataProtection.Internal.DataProtectionHostedService[0]
Key ring failed to load during application startup.
Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProviderException: Parameters: Connection String: [No connection string specified], Resource: https://storage.azure.com/, Authority: https://login.microsoftonline.com/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx. Exception Message: Tried the following 3 methods to get an access token, but none of them worked.
Parameters: Connection String: [No connection string specified], Resource: https://storage.azure.com/, Authority: https://login.microsoftonline.com/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx. Exception Message: Tried to get token using Managed Service Identity. Access token could not be acquired. Received a non-retryable error. MSI ResponseCode: BadRequest, Response: {"error":"invalid_request","error_description":"Identity not found"}
Parameters: Connection String: [No connection string specified], Resource: https://storage.azure.com/, Authority: https://login.microsoftonline.com/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx. Exception Message: Tried to get token using Visual Studio. Access token could not be acquired. Environment variable LOCALAPPDATA not set.
Parameters: Connection String: [No connection string specified], Resource: https://storage.azure.com/, Authority: https://login.microsoftonline.com/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx. Exception Message: Tried to get token using Azure CLI. Access token could not be acquired.
at Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProvider.GetAuthResultAsyncImpl(String resource, String authority, Boolean forceRefresh, CancellationToken cancellationToken)
at Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProvider.GetAccessTokenAsync(String resource, String tenantId, Boolean forceRefresh, CancellationToken cancellationToken)
at WebApp_OpenIDConnect_DotNet.Startup.<>c__DisplayClass5_0.<ConfigureServices>b__5() in /src/Client/Startup.cs:line 120
at Microsoft.AspNetCore.DataProtection.AzureStorage.AzureBlobXmlRepository.CreateFreshBlobRef()
at Microsoft.AspNetCore.DataProtection.AzureStorage.AzureBlobXmlRepository.GetAllElements()
at Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager.GetAllKeys()
at Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingProvider.CreateCacheableKeyRingCore(DateTimeOffset now, IKey keyJustAdded)
at Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingProvider.Microsoft.AspNetCore.DataProtection.KeyManagement.Internal.ICacheableKeyRingProvider.GetCacheableKeyRing(DateTimeOffset now)
at Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingProvider.GetCurrentKeyRingCore(DateTime utcNow, Boolean forceRefresh)
at Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingProvider.GetCurrentKeyRing()
at Microsoft.AspNetCore.DataProtection.Internal.DataProtectionHostedService.StartAsync(CancellationToken token)
Mon Nov 02 2020 Evening Update
I’ve been studying this article by Bac Hoang where I see some error messages that are similar to mine. It looks like one needs to go to the portal.azure.com to adjust some settings for access policies for VMs. But I’m not using VMs directly because I’m using kubernetes.
I confirmed I can access the vault (this works):
az.cmd login --service-principal --username $env:SP_APPID --password $env:SP_SECRET --tenant $env:SP_TENANT
az account get-access-token --resource https://vault.azure.net
But I believe this is not necessary because I’m not calling ProtectKeysWithAzureKeyVault (yet) because Jonas says this is optional.
Maybe Jonas is wrong and I need to call ProtectKeysWithAzureKeyVault?
Jonas’s code won’t compile for me:
var kvClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(_tokenProvider.KeyVaultTokenCallback));
services.AddDataProtection()
.ProtectKeysWithAzureKeyVault(kvClient, settings.KeyVaultKeyId);
ProtectKeysWithAzureKeyVault
only has two overloads and neither accepts a keyVaultClient…
Can someone show me some sample code to call ProtectKeysWithAzureKeyVault? It wants a keyIdentifier (is this a key vault key?) and a keyResolver and a keyResolver wants Azure.core.TokenCredential and there are over a dozen descendents of this abstract TokenCredential class! Which do I want? I cannot find any examples anywhere!
Thanks
Siegfried
We are running some integration tests in a docker container and it appears that we are encountering the following exception. Everything is pretty standard we don’t even directly reference the data protector and it all works outside the container.
.NET core 2.1
Exception
Microsoft (R) Test Execution Command Line Tool Version 15.7.0
Copyright (c) Microsoft Corporation. All rights reserved.
Starting test execution, please wait...
Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[35]
No XML encryptor configured. Key {d53a4cf9-f22c-4723-833b-1c9d3d92de1c} may be persisted to storage in unencrypted form.
Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[35]
No XML encryptor configured. Key {c882fb25-423d-40b0-af65-175dc37bd26f} may be persisted to storage in unencrypted form.
Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingProvider[48]
An error occurred while reading the key ring.
System.IO.IOException: The process cannot access the file '/root/.aspnet/DataProtection-Keys/key-c882fb25-423d-40b0-af65-175dc37bd26f.xml' because it is being used by another process.
at System.IO.FileStream.Init(FileMode mode, FileShare share)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share)
at System.IO.File.OpenRead(String path)
at Microsoft.AspNetCore.DataProtection.Repositories.FileSystemXmlRepository.ReadElementFromFile(String fullPath)
at Microsoft.AspNetCore.DataProtection.Repositories.FileSystemXmlRepository.GetAllElementsCore()+MoveNext()
at System.Collections.Generic.List`1.AddEnumerable(IEnumerable`1 enumerable)
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
at Microsoft.AspNetCore.DataProtection.Repositories.FileSystemXmlRepository.GetAllElements()
at Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager.GetAllKeys()
at Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingProvider.CreateCacheableKeyRingCore(DateTimeOffset now, IKey keyJustAdded)
at Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingProvider.CreateCacheableKeyRingCore(DateTimeOffset now, IKey keyJustAdded)
at Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingProvider.Microsoft.AspNetCore.DataProtection.KeyManagement.Internal.ICacheableKeyRingProvider.GetCacheableKeyRing(DateTimeOffset now)
at Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingProvider.GetCurrentKeyRingCore(DateTime utcNow)
Dockerfile
FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /src
# Copy supporting projects
COPY Onboard.Api.sln ./
COPY docker-compose.dcproj ./
COPY Onboard.Core.Tests/Onboard.Core.Tests.csproj Onboard.Core.Tests/
# Copy Core
COPY Onboard.Core/Onboard.Core.csproj Onboard.Core/
COPY Onboard.Core/Nuget.config Onboard.Core/
# Copy main project
COPY Onboard.Api.People/Onboard.Api.People.csproj Onboard.Api.People/
# Copy test project
COPY Onboard.Api.People.Tests/Onboard.Api.People.Tests.csproj Onboard.Api.People.Tests/
# Restore packages
RUN dotnet restore Onboard.Core --configfile Onboard.Core/Nuget.config -nowarn:msb3202,nu1503
RUN dotnet restore Onboard.Core.Tests --configfile Onboard.Core/Nuget.config -nowarn:msb3202,nu1503
RUN dotnet restore Onboard.Api.People --configfile Onboard.Core/Nuget.config -nowarn:msb3202,nu1503
RUN dotnet restore Onboard.Api.People.Tests --configfile Onboard.Core/Nuget.config -nowarn:msb3202,nu1503
COPY . .
# Build project
WORKDIR /src/Onboard.Api.People.Tests
ENTRYPOINT ["dotnet", "test", "Onboard.Api.People.Tests.csproj", "-l", "trx;LogFileName=/artifacts/people-results.trx"]
- Remove From My Forums
-
Question
-
User-215451226 posted
hi
I created .netcore webapp project.
executed
dotnet build [success]
and then
dotnet run [the problem]error message:
fail: Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingProvider[48] An error occurred while reading the key ring. System.AggregateException: An error occurred while writing to logger(s). (Cannot open log for source '.NET Runtime'. You may not have write access.) ---> System.InvalidOperationException: Cannot open log for source '.NET Runtime'. You may not have write access. ---> System.ComponentModel.Win32Exception (1722): The RPC server is unavailable. --- End of inner exception stack trace ---
An error occurred while reading the key ring about issues HOT 3 OPEN
Comments (3)
Issued a new cert, but the issue remains.
gerane commented on January 11, 2023
As a note, there have been no changes in this dashboard. It was working fine, then this just started out of no where. I have seen this issue before, but it was an older version and required updating to a new version that had fixed the issue. I believe it was present if you were using adfs auth, which this dashboard is using.
This also happens if I remove the login page entirely.
Also tried deleting and reinstalling the module, and tried clearing out anything I could find in appdata.
gerane commented on January 11, 2023
I thought the issue might be licensing, because it also expired the same morning that this issue started, but after purchasing a new license, the issue persists.
Related Issues (20)
- UDTextbox — Number support
- Implement missing Integraed cmdlet support
- Tags fall of when they are renamed
- Swagger tags are not sorted randomly
- API edit buttons are moved off the screen when using more than one tag
- Navigation is collapsing menu when moving between pages
- PSScriptPad doesn’t recognize invalid package.psd1
- PowerShell Pro Tools not starting HOT 1
- 3.7 — Session scope not working
- 3.7 — Get-UDElement demo doesn’t work on sample page
- Ironman Software Host packages do not support arguments passed
- IronmanPowerShellHost packages truncating first 3 characters of scripts
- Endpoint error when receiving invalid JSON
- New-UDTable: -ToolbarContent relies on -ShowSearch
- Created REST API PATH do not update
- EndPoint Path Feature
- Add «Run again» button in Jobs, which transfers all inputs
- Updating to 3.7.0 fails HOT 1
- Azure AD SAML2 Documentation
- Editorconfig support
Recommend Projects
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
TensorFlow
An Open Source Machine Learning Framework for Everyone
Django
The Web framework for perfectionists with deadlines.
Laravel
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
Recommend Topics
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
server
A server is a program made to process requests and deliver data to clients.
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Visualization
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
Recommend Org
We are working to build community through open source technology. NB: members must have two-factor auth.
Microsoft
Open source projects and samples from Microsoft.
Источник
Getting started with Entity FRamework Persist Keys for dataprotection #12333
Comments
djhaanpaa commented Jul 19, 2019 •
Trying to setup entity framework storage for asp.net dataprotection api
Results in the following
Steps to reproduce the behavior:
- Using this version of ASP.NET Core ‘2.2.301’
- Run this code
Expected behavior
The application will work
Additional context
dhaanpaa$ dotnet —info
.NET Core SDK (reflecting any global.json):
Version: 2.2.301
Commit: 70d6be0814
Runtime Environment:
OS Name: Mac OS X
OS Version: 10.14
OS Platform: Darwin
RID: osx.10.14-x64
Base Path: /usr/local/share/dotnet/sdk/2.2.301/
Host (useful for support):
Version: 2.2.6
Commit: 7dac9b1b51
.NET Core SDKs installed:
2.2.107 [/usr/local/share/dotnet/sdk]
2.2.301 [/usr/local/share/dotnet/sdk]
.NET Core runtimes installed:
Microsoft.AspNetCore.All 2.2.5 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.All]
Microsoft.AspNetCore.All 2.2.6 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.All]
Microsoft.AspNetCore.App 2.2.5 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 2.2.6 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.NETCore.App 2.2.5 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
Microsoft.NETCore.App 2.2.6 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
To install additional .NET Core runtimes or SDKs:
https://aka.ms/dotnet-download
The text was updated successfully, but these errors were encountered:
Источник
ProtectKeysWithAzureKeyVault deserves more explanation #16422
Comments
Pyrobolser commented Jan 6, 2020
Going from development on localhost where everything is simple to Linux App Services, suddenly nothing is working anymore because of this whole «data protection» issue.
I am trying to follow the documentation and understand I need a Blob Storage Account and a Azure Key Vault, I setup all of those, try to generate the but apparently it needs a reference to a «blob». I go from issues to issues until I get a Root element is missing.
Now I have an empty key.xml as a blob and I don’t understand what the application actually wants.
Is there an example somewhere that we can follow, the documentation is a little bit light on this side when you don’t know all this.
Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.
- ID: b63ab082-ad30-b00d-ecd1-ca88eee1659e
- Version Independent ID: 69818122-e47a-3fed-ea37-8009f66e2a5c
- Content: Configure ASP.NET Core Data Protection
- Content Source: aspnetcore/security/data-protection/configuration/overview.md
- Product: aspnet-core
- Technology: aspnetcore-security
- GitHub Login: @Rick-Anderson
- Microsoft Alias: riande
The text was updated successfully, but these errors were encountered:
akempe commented May 5, 2020 •
Couldn’t agree more. The documentation is woefully inadequate in explaining:
- how to setup the key ring
- how to setup a decent level of restrictive permissions required to the blob storage
- links to articles describing setting up service-to-service permissions / sas tokens effectively and safely
- the entire sas token vs services-to-service permissions/roles/iam/policies thing is a mess of documentation spread over far too many articles. it’s WAY TOO easy to give too much access in the process of trying to just-make-it-work
For those looking, I finally got it to work after sifting through the source code for AzureBlobXmlRepository . but have a nagging suspicion I’ve missed the easy route to success here. (?)
I created a template XML file containing:
The name of the root element doesn’t seem to be important (hopefully this is correct).
On first run, it seems to have populated the file successfully with the keys. Permissions seemed to have to be created at the Storage Account level with app service identity getting Blob Data Contributor access (not sure if this can be more restrictive?)
The app service identity was granted key wrap/unwrap access to the KeyVault.
Azure team: can someone confirm this is the correct approach? If it’s not, what is the right way? Either way, please can the docs make this more clear, as I’m sure many people are bumping into this continually.
Rick-Anderson commented May 5, 2020 •
Comment hub feedback:
- incomplete information
- Short code snippets without any kind of larger context aren’t helpful.
- not easy to understand.
- DataProtection was updated to use IOptions but there’s no mention of how to reload configurations for DP (which is the main selling point of that system!)
akempe commented May 5, 2020
@Rick-Anderson side question, why can’t we just store the keys directly in keyvault? why the layer of indirection here?
ghost commented Jun 20, 2020
Good day, from what i understand,
services.AddDataProtection() .PersistKeysToAzureBlobStorage(new Uri(» «)) .ProtectKeysWithAzureKeyVault(» «, » «, » «);
PersistKeysToAzureBlobStorage saves the identity cookie encryption and decryption keys to azure blob storage.
ProtectKeysWithAzureKeyVault encrypts the blob containing the keys that are created by PersistKeysToAzureBlobStorage.
But what does clientId and clientSecret mean?
mkArtakMSFT commented Jun 28, 2020
Thanks for bringing up this issue.
@Pilchie can you please assign this to an engineer who is well familiar with the Data Protection. Let’s get the docs updated to address the gap.
Pilchie commented Jun 29, 2020
@HaoK @blowdart — either of you want to take a look?
blowdart commented Jun 29, 2020
It’s getting replaced soon with a new library soon, so it’s probably not worth the investment, however @Petermarcu then needs to assign someone to own and update the docs going forward.
ghost commented Jul 2, 2020
Looking forward to new library.
DaleyKD commented Jul 10, 2020
@akempe — Thank you for that. I’m trying to use the new Azure.Extensions.AspNetCore.DataProtection.Keys SDK, and I’m not convinced it requires the Blob to exist, but I’m doing it anyway.
However, I think I may be getting a race condition on startup of my ASP.NET Core app. I know this is a docs issue, and I’m not here to derail. But this definitely needs some TLC to ensure we get it right.
Putting the stack here as a just in case:
akempe commented Jul 10, 2020 •
@DaleyKD no problem! Are you saying you’re still getting this error?
System.Xml.XmlException: Root element is missing.
It looks identical to the one I had originally and lead me to initialising the blob with:
If you get it to work with the new SDK, please let us know as I’m sure people are going to run into this while MS resolve their docs situation. For what it’s worth, this has been stable in prod for a few months now.
DaleyKD commented Jul 10, 2020
@akempe : Let me clarify, as I wasn’t as clear as I had hoped earlier.
- It appears that the new SDK ( Azure.Extensions.AspNetCore.DataProtection.Keys, Version=1.0.0.0 ) does not get mad if the Blob does not exist. I see no error thrown, and the current documentation provided by MSFT (which says we should run the app once without ProtectKeysWithAzureKeyVault , then run it again with it) seems to be obsolete now.
- This error occurs whether or not I initialize the blob with (assuming I’m doing it correctly via C#):
- In dev, the Root element is missing error seems to occur when:
- Run the website
- Login and get a cookie
- Stop the website
- Delete the blob .xml
- Run the website again
- It does not happen if I am logged out and have deleted the .xml
I suspect it’s because it’s trying to write two or more keys (one or more dealing with the Identity cookie and one or more dealing with the anti-forgery for POST) and therefore, having a race condition
Other things I have tried that have no effect:
- Ensure the initialized blob starts with the BOM ufeff
- Try vs.
- Ensure that the content type for the blob is application/xml;charset=utf-8 vs. application/octet-stream
And finally, even when I run the app a second time, and it has a valid file in there from the previous run, and I do NOT delete it, I still get the error. Everything points back to a race condition.
nmg196 commented Mar 22, 2021 •
I’m also really stuck with this. The docs surrounding this are very unclear as they don’t give any examples.
The documentation implies it will create the blob on the first run, but how can it do that if the docs also show you need the full URI to the actual file including a SAS token? That’s not physicially possible from what I can see — so is the URL supposed to be for a blob container and not the blob xml file itself?
Looking at the comments it seems like the whole «automatic creation» of the blob doesn’t work at all. It doesn’t even say what should be in the file if you want to create it manually. The only workaround which worked for me was to initially save it to the local file system, then use the generated local file to seed the Azure blob. Ideally, the API should realise an empty file has been supplied and replace it with one of the correct format to reduce «getting started friction».
As @akempe mentioned, it’s also really odd that the article doesn’t mention anything about how to set up permissions for the SAS token and Key Vault, given the apparent importance of security when storing keys.
arqe commented Mar 25, 2021
@nmg196 The very same here also. This documentation doesn’t make sense and is is unfollowable.
Many of security related docs are frustratingly bad overall. More so that in this particular area you definitely want to know what exactly you are doing and not to trial random to see the magic happening.
haldiggs commented Apr 6, 2021
I am probably the most ignorant person here as to what is supposed to be happening. I am trying to use PersistKeysToAzureBlobStorage and getting nothing but frustrated.
I am using Azure to generate the shared connection strings. I am using the «Blob service SAS URL» and assigning to a string variable named blobSasUrl.
I have created a container and I seem to be successful at creating sub containers in code. I am running this in a .Net 5.0 Core WebApi application.
services.AddDataProtection()
.SetApplicationName(Assembly.GetEntryAssembly().GetName().Name)
.PersistKeysToAzureBlobStorage(new Uri(blobSasUrl))
.ProtectKeysWithCertificate(clientCertificate);
All I keep getting is this error that doesn’t really help me figure out why it does not work. Since I am not the one who generates the Url I have to depend on Azure.
Azure.RequestFailedException: Value for one of the query parameters specified in the request URI is invalid.
RequestId:bd9cedff-d01e-00ef-4a26-2b644e000000 Time:2021-04-06T20:52:23.7976519Z Status: 400 (Value for one of the query parameters specified in the request URI is invalid.) ErrorCode: InvalidQueryParameterValue Headers: Server: Microsoft-HTTPAPI/2.0 x-ms-request-id: bd9cedff-d01e-00ef-4a26-2b644e000000 x-ms-client-request-id: eed59e39-e857-4ab4-8f2a-5e146a5cc7f6 x-ms-error-code: InvalidQueryParameterValue Date: Tue, 06 Apr 2021 20:52:23 GMT Content-Length: 351 Content-Type: application/xml
I am hoping this is related to this issue you guys are having with the documentation.
Mike-E-angelo commented Jan 7, 2022
Any update here would be appreciated. Looking at the documentation it states:
But looking at these packages on NuGet, the packages recommended to remove are actually newer and updated more frequently than the recommended packages to install in their place.
For example, Azure.Extensions.AspNetCore.DataProtection.Blobs («newer») is dated 5/14/2021 w/ 6 published versions, while Microsoft.AspNetCore.DataProtection.AzureStorage («older») was last released 24 days ago with 8 published versions since the last publishing of the «new» package (5/14/2021).
haldiggs commented Jan 7, 2022
omatic creation» of the blob doesn’t work at all. It doesn’t even say what should be in the file if you want to create it manually. The only workaround w
good luck getting an answer. there must be documentation somewhere else because there hasn’t been any answers to other questions for years
datwelk commented Apr 8, 2022
@Rick-Anderson could we get a reply from Microsoft on this issue please?
Rick-Anderson commented Apr 8, 2022
It’s getting replaced soon with a new library soon, so it’s probably not worth the investment, however @Petermarcu then needs to assign someone to own and update the docs going forward.
@Petermarcu can you assign someone to own and update the docs going forward.
Источник
Эта проблема возникает только тогда, когда я развертываю веб-приложение ASP .NET Core 2.1 на общем хостинге. Я использую хранилище ключей Azure с PersistKeysToFileSystem.
Веб-приложение хорошо работает на моем компьютере для разработки и в приложении Azure с Azure Key Vault и без него с использованием PersistKeysToFileSystem.
fail: Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingProvider[48]
An error occurred while reading the key ring.
System.Net.Http.HttpRequestException: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond ---> System.Net.Sockets.SocketException: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond
at System.Net.Http.ConnectHelper.ConnectAsync(String host, Int32 port, CancellationToken cancellationToken)
--- End of inner exception stack trace ---
at System.Net.Http.ConnectHelper.ConnectAsync(String host, Int32 port, CancellationToken cancellationToken)
at System.Threading.Tasks.ValueTask``1.get_Result()
at System.Net.Http.HttpConnectionPool.CreateConnectionAsync(HttpRequestMessage request, CancellationToken cancellationToken)
at System.Threading.Tasks.ValueTask``1.get_Result()
at System.Net.Http.HttpConnectionPool.WaitForCreatedConnectionAsync(ValueTask``1 creationTask)
at System.Threading.Tasks.ValueTask``1.get_Result()
at System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage request, Boolean doRequestAuth, CancellationToken cancellationToken)
at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
at System.Net.Http.HttpClient.FinishSendAsyncBuffered(Task``1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boolean disposeCts)
at Microsoft.Azure.KeyVault.KeyVaultCredential.ProcessHttpRequestAsync(HttpRequestMessage request, CancellationToken cancellationToken)
at Microsoft.Azure.KeyVault.KeyVaultClient.WrapKeyWithHttpMessagesAsync(String vaultBaseUrl, String keyName, String keyVersion, String algorithm, Byte[] value, Dictionary``2 customHeaders, CancellationToken cancellationToken)
at Microsoft.Azure.KeyVault.KeyVaultClientExtensions.WrapKeyAsync(IKeyVaultClient operations, String keyIdentifier, String algorithm, Byte[] key, CancellationToken cancellationToken)
at Microsoft.AspNetCore.DataProtection.AzureKeyVault.AzureKeyVaultXmlEncryptor.EncryptAsync(XElement plaintextElement)
at Microsoft.AspNetCore.DataProtection.AzureKeyVault.AzureKeyVaultXmlEncryptor.Encrypt(XElement plaintextElement)
at Microsoft.AspNetCore.DataProtection.XmlEncryption.XmlEncryptionExtensions.EncryptIfNecessary(IXmlEncryptor encryptor, XElement element)
at Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager.Microsoft.AspNetCore.DataProtection.KeyManagement.Internal.IInternalXmlKeyManager.CreateNewKey(Guid keyId, DateTimeOffset creationDate, DateTimeOffset activationDate, DateTimeOffset expirationDate)
at Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager.CreateNewKey(DateTimeOffset activationDate, DateTimeOffset expirationDate)
at Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingProvider.CreateCacheableKeyRingCore(DateTimeOffset now, IKey keyJustAdded)
at Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingProvider.Microsoft.AspNetCore.DataProtection.KeyManagement.Internal.ICacheableKeyRingProvider.GetCacheableKeyRing(DateTimeOffset now)
at Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingProvider.GetCurrentKeyRingCore(DateTime utcNow)
Hosting environment: Production
1 ответ
Я столкнулся с этой проблемой после установки Active Directory, и в моем решении для параметра «Загрузить профиль пользователя» установлено значение «Истина» для пула приложений IIS.
3
Hoang Tran
11 Июн 2020 в 11:06
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
Обновлено 12.06.2017
Добрый день уважаемые читатели сегодня хочу рассказать, как решается ошибка an error occurred while attempting при загрузке Windows. Данная инструкция подойдет как для клиентских операционных систем по типу Windows 7, 8.1 и 10, так и для Windows Server. На исправление данной проблемы у вас уйдет не более 10 минут, даже в случае с сервера это не такой уж и большой простой по времени.
Что ознаает error occurred while attempting to read
И так расскажу, что было у меня. У нас есть блейд корзина с блейдами hs22, у них своих дисков нету и загружаются они по fc с СХД netApp, после аварии на одном из блейдов когда шла загрузка windows server 2008 r2, выскочила вот такая ошибка
An error occurred while attempting to read the boot configuration data
File: EFIMicrosoftBootBCD
status: 0xc000000f
Из ошибки видно, что операционная система не может загрузиться из за загрузчика в файле EFIMicrosoftBootBCD.
Причины ошибки 0xc000000f
- Повредился загрузчик Windows
- Случайно удалили загрузочную область
Таблица разделов загрузочного жесткого диска с UEFI GPT
У вас должны быть по крайней мере три раздела.
- Системный раздел EFI (ESP – EFI System Partition) – 100 Мб (тип раздела — EFI)
- Резервный раздел Майкрософт – 128 Мб (тип раздела — MSR)
- Основной раздел Windows – раздел с Windows
Или еще есть дополнительный раздел.
- Windows RE
Давайте поговорим теперь о каждом из них более подробно.
Windows RE
Windows RE это раздел 300 Мб на разделе GPT, и смысл его в том, чтобы содержать данные для восстановления загрузчика. Такой же есть и в системах с разметкой MBR, размером 350 Мб, он еще носит название System Reserved и наряду с RE содержит файлы, необходимые для загрузки Windows.
Среда восстановления находится в файле winre.wim
Windows RE создается в процессе установки Windows.
- В процессе создания структуры разделов для Windows RE назначается специальный атрибут 0x8000000000000001. Он является комбинацией двух атрибутов – один блокирует автоматическое назначение буквы диска, а другой – помечает раздел как обязательный для работы системы, что препятствует его удалению из оснастки управления дисками.
- К разделу Windows применяется образ системы — стандартный install.wim или настроенный custom.wim. Как следствие, winre.wim оказывается в папке WindowsSystem32Recovery.
- На разделе Windows RE создается папка RecoveryWindowsRE, после чего это расположение среды восстановления регистрируется утилитой reagentc.
W:WindowsSystem32reagentc.exe /setreimage /path T:RecoveryWindowsRE /target W:Windows
reagentc.exe входит в состав Windows и запускается она именно с раздела операционной системы. Наряду с регистрацией RE команда перемещает winre.wim с раздела Windows на служебный раздел Windows RE. Если вы хотите увидеть файл, сначала назначьте диску букву с помощью утилиты diskpart. Поскольку файл имеет атрибуты системный и скрытый, быстрее всего его покажет команда dir /ah.
В результате этих действий загрузка в среду восстановления происходит с раздела Windows RE. Подробности процесса я покажу в грядущем рассказе о восстановлении резервной копии.
Раздел Windows RE не является обязательным для работы Windows. Среда восстановления может отсутствовать или находиться прямо на разделе с операционной системой. Однако размещение Windows RE на отдельном разделе преследует две цели:
- Загрузка в среду восстановления на ПК с зашифрованным разделом Windows. В среду восстановления невозможно загрузиться, если она находится на разделе с Windows, который зашифрован. Раздел Windows RE исключен из шифрования, поэтому всегда можно попасть в среду и воспользоваться ее инструментами.
- Защита среды восстановления от шаловливых рук. Поскольку раздел невозможно удалить в оснастке управления дисками, вероятность его смерти по неосторожности несколько ниже, хотя при желании его несложно удалить с помощью diskpart.
Раздел System (EFI)
Раздел EFI, отформатированный в FAT32, является обязательным для разметки GPT на системах с UEFI. Стандартный размер раздела EFI составляет 100MB, но на дисках расширенного формата 4K Native (секторы 4KB) он увеличен до 260MB ввиду ограничений FAT32. Изготовители ПК могут хранить на этом разделе какие-то свои инструменты, поэтому его размер варьируется в зависимости от производителя.
В разметке GPT раздел EFI выполняет одну из ролей, которая возложена на раздел System Reserved в разметке MBR. Он содержит хранилище конфигурации загрузки (BCD) и файлы, необходимые для загрузки операционной системы.
Раздел MSR (Microsoft System Reserved)
Этот раздел также является обязательным для разметки GPT. Он отформатирован в NTFS и занимает в Windows 8 и 8.1 — 128MB, а в Windows 10 — 16MB. GPT не позволяет использовать скрытые секторы диска (в отличие от MBR), поэтому раздел MSR необходим для служебных операций встроенного и стороннего ПО (например, конвертирование простого диска в динамический).
Несмотря на наличие “System Reserved” в названии, раздел MSR не имеет ничего общего с разделом System Reserved в разметке MBR. Кроме того, он не виден в файловых менеджерах и оснастке управления дисками, хотя diskpart его показывает.
Раздел Windows
Это раздел с операционной системой, к которому применяется стандартный образ install.wim или настроенный образ.
Устраняем error occurred while attempting to read
Как вы помните мы с вами словили вот такую вещь
An error occurred while attempting to read the boot configuration data
File: EFIMicrosoftBootBCD
status: 0xc000000f
Теперь давайте разберемся как с графическими методам так и с методами командной строки.
Утилитой восстановление только для клиентский Windows
Тут мы будем пользоваться точками восстановления Windows, они по умолчанию включены в клиентские Windows 7, 8.1, 10, и это логично, чтобы быстро восстановиться при каких то глюках системы. Тут нам понадобится загрузочная флешка с такой же версией Windows, если у вас например WIndows 8.1 64x то и на флешке должна быть 64 битная версия.
Для Windows 7, это выглядит так
Начав загружать дистрибутив Windows 7 с загрузочной флешки, у вас появится окно установки, в нижнем углу нажмите Восстановление системы.
У вас появятся параметры, самый первый вариант это выбрать Восстановление запуска
Буде выполнена попытка восстановить загрузочные области Windows 7
Жмем Исправить и перезагрузить.
Если после перезагрузки, у вас осталась ошибка, то снова заходим в данное меню и выбираем уже тогда второй пункт, Восстановление системы Windows 7. Утилита найдет установленную операционную и попытается откатить ее на момент когда она работала корректно, ваши персональные данные не пострадают, максимум вы можете не досчитаться программ.
Для Windows 8.1 и 10, это выглядит так
Ошибка an error occurred while attempting при загрузке решается так же, вы создаете загрузочную флешку с Windows 8.1, как это сделать ссылка выше. Загружаетесь с нее и вы попадаете в среду восстановления. Так же на окне установки, нажимаете восстановление системы.
Поиск и устранение неисправностей > 1 вариант Вернуть компьютер в исходное состояние, с сохранением файлов и второй вариант Дополнительные параметры > Восстановление системы или восстановление образа системы.
После перезагрузки, у вас должно быть все отлично, в это преимущество десктопных платформ, от серверных Windows Server, так как в серверных версиях, по умолчанию все отключено и администратору нужно все включать самому, а отключено из за экономии ресурсов, но с моей точки зрения могли бы для точек восстановления сделать исключение.
Восстановление для всех через командную строку
Данный метод, более сложный, особенно для тех кто в первый раз видит командную строку операционной системы. Данный метод подойдет как и для 7,8.1,10 так и для Windows Server 2008 R2 и 2012 R2. В данном методе вам так же потребуется загрузочная флешка с нужным дистрибутивом вашей ос. Я буду показывать на примере Windows Server 2008 r2, но все действия как я и писал подойдут для любой ос, начиная с W7.
Еще единственное отступление, что если у вас как и у меня операционная система накрылась на блейд сервере, то сделайте первый пункт, если у вас обычный ПК, то просто его пропустите.
1 Часть только для blade servers
- Так как у меня блейд система, то для того чтобы туда подгрузить дистрибутив для ремонта, потребуется подмантировать ISO образ, делает это просто. Заходите в Blade Center, выбираете Remote control и через java KVM выбираете нужный блейд. Сверху нажимаете Remote Drive > Select Image
Указываем путь до нашего ISO
Выбираем сверху нужный блейд для монтирования и ставим галку защиты от записи Write Protect, после чего Mount All.
Все видим ISO смонтирован, закрываем данное окно.
Теперь в Boot меню выбираем загрузка с DVD Rom. В итоге начнется загрузка с вашего ISO, вставленного в Virtual CD-rom.
2 часть для всех
Вы увидите, стандартную полосу загрузки.
У вас появится окно выбора языка
Если у вас дистрибутив английский, то для открытия командной строки нажмите Shift+F10, если русская, то выберите раскладку клавиатуры США международная, так как дальнейшие команды будут вводиться именно на этой раскладке, жмем далее
Раскладку выбрали на следующем окне жмем привычное меню восстановление.
В серверной ос, как я вам и говорил вы не увидите, контрольных точек. Выбираем второй пункт и далее.
И вот она долгожданная командная строка
В Windows 8.1, 10 и Server 2012 R2, попасть в командную строку можно так же, но меню слегка видоизменили. Вы так же идете в восстановление, потом диагностика.
Далее Дополнительные параметры > Командная строка.
И вот тут мы сейчас рассмотрим несколько методов.
1 метод устранить an error occurred while attempting
В первом методе мы с вами выполним две команды, восстанавливающие загрузочную область. Мы используем команду Bootrec. Введите ее в командной строке, вам отобразиться перечень атрибутов.
- /FixMbr > восстановит MBR запись, с UEFI это не прокатит
- /FixBoot > делает новую запись в системный раздел
- /ScanOs > поиск всех Windows на дисках
- >rebuildBcd > сканирование всех ос и добавление из в загрузочное меню
Выполним Bootrec.exe /FixMbr, потом Bootrec.exe /FixBoot
Обе команды штатно отработали, в первый сектор загрузочного раздела записана новая загрузочная запись, а вторая команда записывает новый загрузочный сектор. Пишем Exit и перезагружаемся.
2 метод устранить an error occurred while attempting
Если первый метод вам не помог, не спешите расстраиваться, так же загружаемся в командную строку и вводим вот такие команды.
Bootrec /ScanOs, она просканирует все ваши жёсткие диски и разделы на наличие операционных систем и если такие будут найдены, то выйдет соответствующее предупреждение. Затем нужно ввести команду Bootrec.exe /RebuildBcd, данная утилита предложит внести найденные Windows в меню загрузки, соглашаемся и вводим Y и жмём Enter, всё найденная Windows добавлена в меню загрузки
еще в дополнение можно тут же прописать bootsect /NT60 SYS , но если у вас UEFI, то получите ошибку.
Если все ок, то получите обновленную область bootcode,
Перезагражаемся и радуемся жизни. Ниже способы для UEFI.
3 метод устранить an error occurred while attempting для UEFI
Идем дальше в нашей эпопеи и разберем слегка может быть сложный метод для новичков, но зато он поможет восстановить загрузку UEFI.
Так же загружаемся в режим командной строки и вводим
Так же загружаемся в режим командной строки и вводим
diskpart
list disk > ей смотрим список разделов в системе
Выберем диск, на котором установлена Windows 8 (если жесткий диск в системе один, его индекс будет нулевым):
sel disk 0
Выведем список разделов в системе:
list vol
В нашем примере видно, что раздел EFI (его можно определить по размеру 100 Мб и файловой системе FAT32) имеет индекс volume 1, а загрузочный раздел с установленной Windows 8.1 — volume 3.
Назначим скрытому EFI разделу произвольную букву диска:
select volume 1
assign letter M:
Завершаем работу с diskpart:
exit
Перейдем в каталог с загрузчиком на скрытом раздел
cd /d m:efimicrosoftboot
Пересоздадим загрузочный сектор: на загрузочном разделе
bootrec /fixboot
Удалим текущий файл с конфигурацией BCD, переименовав его (сохранив старую конфигурацию в качестве резервной копии):
ren BCD BCD.bak
С помощью утилиты bcdboot.exe пересоздадим хранилище BCD, скопировав файлы среды загрузки из системного каталога:
bcdboot C:Windows /l en-us /s M: /f ALL
где, C:Windows – путь к каталогу с установленной Windows 8.1.
/f ALL – означает что необходимо скопировать файлы среды загрузки, включая файлы для компьютеров с UEFI или BIOS (теоретическая возможность загружаться на EFI и BIOS системах)
/l en-us — тип системной локали . По умолчанию используется en-us — английский язык (США) .
В случае использования русской версии Windows 8.1 команда будет другая:
bcdboot C:Windows /L ru-ru /S M: /F ALL
Вот как выглядит структура на самом деле
4 метод устранить an error occurred while attempting для UEFI
Идем дальше в нашей эпопеи и разберем слегка может быть сложный метод для новичков, но зато он поможет восстановить загрузку UEFI.
Так же загружаемся в режим командной строки и вводим
diskpart
list disk > ей смотрим список разделов в системе
у меня операционная система стоит на 100 гиговом диске с буквой С.
Командой list disk мы посмотрим список дисков
Меня интересует Диск 0, так как на нем система. Выберем его.
List partition > Выводим список разделов
Select partition 1 > Выбираем нужный с загрузчиком (Если есть системный то его, если его нет то Зарегистрированный) Все равно их удалять оба
Убиваем первый и второй раздел (Системный и зарегистрирован)
Delete partition override
Снова введем List partition и убедимся что оба удалились. Теперь мы можем вручную пересоздать разделы EFI и MSR. Для этого в контексте утилиты diskpart последовательно выполните команды
Выбираем диск
select disk 0
create partition efi size=100
Убеждаемся, что выбран раздел 100 Мб (звездочка)
list partition
select partition 1
format quick fs=fat32 label=»System»
assign letter=G
create partition msr size=128
list partition
list vol
Все успешно создалось.
В нашем случае разделу с Windows уже назначена буква диска C:, если это не так, назначим ему букву следующим образом
select vol 8
assign letter=G
exit
Скопируем файлы среды EFI из каталога установленной Windows 2008 R2 у вас другая может быть:
mkdir G:EFIMicrosoftBoot
xcopy /s C:WindowsBootEFI*.* G:EFIMicrosoftBoot
Идем на следующий пункт решения ошибки an error occurred while attempting
Пересоздадим конфигурацию загрузчика Windows Server 2008 R2:
g:
cd EFIMicrosoftBoot
bcdedit /createstore BCD
bcdedit /store BCD /create {bootmgr} /d “Windows Boot Manager”
bcdedit /store BCD /create /d “Windows Server 2008 r2” /application osloader
Команда возвращает GUID созданной записи, в следующей команде этот GUID нужно подставить вместо {your_guid}
bcdedit /store BCD /set {bootmgr} default {your_guid}
bcdedit /store BCD /set {bootmgr} path EFIMicrosoftBootbootmgfw.efi
bcdedit /store BCD /set {bootmgr} displayorder {default}
Дальнейшие команды выполняются в контексте {default}
bcdedit /store BCD /set {default} device partition=c:
bcdedit /store BCD /set {default} osdevice partition=c:
bcdedit /store BCD /set {default} path WindowsSystem32winload.efi
bcdedit /store BCD /set {default} systemroot Windows
exit
Все перезагружаемся и пробуем запустить ваш компьютер или сервер. Еще варианты.
- Отключаем питание ПК
- Отключаем (физически) жесткий диск
- Включаем ПК, дожидаемся появления окна с ошибкой загрузки и снова его выключаем.
- Подключаем диск обратно
5 метод устранить an error occurred while attempting
Есть еще метод для решения ошибки an error occurred while attempting и 0xc000000f, и это софт Acronis Disk Director. Есть такой загрузочный диск Acronis Disk Director для ремонта, есть ноутбук с двумя ос, первая Windows7, а вторая Windows 8.1, и обе не грузятся, загружаемся с нашего Acronis Disk Director
Все надеюсь у вас теперь ушла ошибка an error occurred while attempting при загрузке Windows и вы загрузились. ошибка в том, что у нас на обоих жёстких дисках должны быть отмечены красным флажком первые скрытые разделы System Reserved (Зарезервировано системой). На Windows 7 объём такого раздела составляет 100 МБ, а на Windows 8 350 МБ, именно эти разделы носят атрибуты: Система. Активнен и именно на этих разделах находятся файлы конфигурации хранилища загрузки (BCD) и файл менеджера загрузки системы (файл bootmgr). А у нас получается эти атрибуты носят другие разделы. Из-за этого Windows 7 и Windows 8.1 не загружаются.
Выбираем первый жёсткий Диск 1, щёлкаем на первом разделе System Reserved (Зарезервировано системой) правой мышью и выбираем «Отметить как активный»
Том Зарезервировано системой будет отмечен как активный. Нажимаем ОК.
То же самое делаем с Диском 2. Программа Acronis Disk Director работает в режиме отложенной операции, чтобы изменения вступили в силу нажимаем кнопку «Применить ожидающие операции»
Продолжить. Как видим, после наших изменений активными стали те разделы которые нужно.
Надеюсь вам удалось устранить ошибки an error occurred while attempting и 0xc000000f
- Remove From My Forums
-
Question
-
My Windows 10 Enterprise Edition ran into networking issues because of which I has to reinstall windows. It has one bitlocker encrypted drive on a separate physical disk than than the one I use for OS (120GB SSD). Before installation I backed up the recovery
key of the drive. After Windows re installation (same version) I am unable to open the drive anymore. I previously configured it to open with a password, now neither the password nor the recovery key are able to open it. It says «Password does not match».
When using the recovery key gives the error «ERROR: An error occurred while attempting to read the key from disk.» Please note that this is not the OS drive and the only bitlocker encrypted drive, so there is no chance of giving wrong drive key.
BTW the identifier matches. Any help is greatly appreciated.
Answers
-
Hi ,
Have you tried directly use BitLocker Recovery Key like this?
«In the elevated command prompt, type the command below and press Enter. (see screenshot below)
NOTE: Substitute E: in the command below with the drive letter of the locked drive that you wanted to unlock, and substitute BitLocker Recovery Key in the command below with the actual long number recovery key for the drive.
manage-bde -unlock E: -rp BitLocker Recovery Key»If it is still not available to access encrypted drive, I am afraid that the recovery key is the only way to get the Bitlocker drive back. If it is not available access, you’d better ask data recovery company for help, if the data is valuable.
Best regards
Please remember to mark the replies as an answers if they help and
unmark them if they provide no help.
If you have feedback for TechNet Subscriber Support, contact
tnmff@microsoft.com.-
Proposed as answer by
Tuesday, October 11, 2016 8:41 AM
-
Marked as answer by
MeipoXuMicrosoft contingent staff
Tuesday, October 11, 2016 8:41 AM
-
Proposed as answer by