Saya memiliki beberapa kode yang membuat panggilan ke layanan web pihak ketiga yang dijamin menggunakan sertifikasi X.509.
Jika saya memanggil kode secara langsung (menggunakan unit test) itu berfungsi tanpa masalah.
Ketika digunakan, kode ini akan dipanggil melalui Layanan WCF. Saya telah menambahkan tes unit kedua yang memanggil Layanan WCF, namun ini gagal dengan CryptographicException
pesan, "Keyset does not exist"
ketika saya memanggil metode pada layanan web pihak ketiga.
Saya berasumsi bahwa ini karena Layanan WCF saya akan berusaha memanggil layanan web pihak ketiga menggunakan pengguna yang berbeda untuk saya sendiri.
Adakah yang bisa menjelaskan lebih lanjut tentang masalah ini?
Ini kemungkinan besar karena pengguna IIS tidak memiliki akses ke kunci pribadi untuk sertifikat Anda. Anda dapat mengatur ini dengan mengikuti langkah-langkah ini ...
sumber
Saya memiliki masalah yang identik tadi malam. Izin pada kunci pribadi diatur dengan benar, semuanya tampak baik-baik saja kecuali Keyset tidak ada kesalahan. Pada akhirnya ternyata sertifikat diimpor ke toko pengguna saat ini terlebih dahulu dan kemudian pindah ke toko mesin lokal. Namun - itu tidak memindahkan kunci privat, yang masih di dalam
C: \ Documents and settngs \ Administrator ...
dari pada
C: \ Documents and settngs \ Semua pengguna ...
Meskipun izin pada kunci telah ditetapkan dengan benar, ASPNET tidak dapat mengaksesnya. Ketika kami mengimpor kembali sertifikat sehingga kunci pribadi ditempatkan di cabang Semua pengguna, masalahnya hilang.
sumber
Untuk mengatasi "Keyset tidak ada" saat menjelajah dari IIS: Ini mungkin untuk izin pribadi
Untuk melihat dan memberikan izin:
Untuk memberikan izin:
sumber
Punya masalah yang sama ketika mencoba menjalankan aplikasi WCF dari Visual Studio. Memecahkannya dengan menjalankan Visual Studio sebagai administrator.
sumber
Saya telah menghadapi masalah ini, sertifikat saya di mana memiliki kunci pribadi tetapi saya mendapatkan kesalahan ini ( "Keyset tidak ada" )
Penyebab: Situs web Anda berjalan di bawah akun "Layanan jaringan" atau memiliki lebih sedikit hak istimewa.
Solusi : Ubah identitas kumpulan Aplikasi ke "Sistem Lokal", reset IIS dan periksa lagi. Jika itu mulai berfungsi itu adalah masalah izin / Kurang hak istimewa, Anda dapat berkedok kemudian menggunakan akun lain juga.
sumber
Benar-benar membuat frustrasi, saya memiliki masalah yang sama dan mencoba sebagian besar di atas. Sertifikat yang diekspor dengan benar memiliki izin untuk membaca file
C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys
, namun ternyata tidak memiliki izin pada folder. Menambahkannya dan berhasilsumber
IISAPPPool\www.mywebsite.com
yang merupakan nama pengguna windows untuk appool saya dan berhasil :-)Saya punya masalah yang persis sama juga. Saya telah menggunakan perintah
hasilnya menunjukkan bahwa kunci pribadi ada di folder c: \ ProgramData alih-alih C: \ Documents and settngs \ Semua pengguna ..
Ketika saya menghapus kunci dari folder c: \ ProgramData, sekali lagi jalankan perintah findPrivatekey tidak berhasil. yaitu. tidak menemukan kuncinya.
Tetapi jika saya mencari kunci yang sama dikembalikan oleh perintah sebelumnya, saya masih dapat menemukan kunci masuk
C: \ Documents and settngs \ Semua pengguna ..
Jadi menurut pemahaman saya, IIS atau WCF yang di-host tidak menemukan kunci pribadi dari C: \ Documents and settngs \ Semua pengguna ..
sumber
Saya mendapatkan kesalahan: CryptographicException 'Keyset tidak ada' ketika saya menjalankan aplikasi MVC.
Solusi adalah: untuk memberikan akses ke sertifikat pribadi ke akun yang dijalankan oleh kumpulan aplikasi. Dalam kasus saya itu adalah menambahkan IIS_IUSRS dan memilih lokasi yang tepat untuk menyelesaikan masalah ini.
sumber
Jawaban dari Steve Sheldon memperbaiki masalah bagi saya, namun, karena saya menulis izin sertifikat tanpa gui, saya membutuhkan solusi skrip. Saya kesulitan menemukan di mana kunci pribadi saya disimpan. Kunci pribadi tidak dalam
-C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys
, akhirnya saya menemukan bahwa itu benar-benar dalamC:\ProgramData\Microsoft\Crypto\Keys
. Di bawah ini saya jelaskan bagaimana saya mengetahui hal itu:Saya mencoba
FindPrivateKey
tetapi tidak dapat menemukan kunci privat, dan menggunakan PowerShell$cert.privatekey.cspkeycontainerinfo.uniquekeycontainername
null / kosong.Untungnya,
certutil -store my
mendaftar sertifikat dan memberi saya rincian yang saya butuhkan untuk skrip solusi.Saya kemudian memindai
c\ProgramData\Microsoft\Crypto\
folder dan menemukan file 8787033f8ccb5836115b87acb_ca96c65a-4b42-a145-eee62128a di C: \ ProgramData \ Microsoft \ Crypto \ Keys .Memberi akses baca akun layanan saya file ini memperbaiki masalah bagi saya
sumber
Saya menemukan beberapa informasi yang hilang yang membantu saya mendapatkan layanan WCF saya dengan keamanan tingkat pesan melewati "Keyset tidak ada" yang terus saya jalankan meskipun memberikan izin untuk semua kunci yang dihasilkan dari contoh-contoh di internet.
Saya akhirnya mengimpor kunci pribadi ke toko orang tepercaya di mesin lokal dan kemudian memberikan izin kunci yang benar kepada kunci pribadi.
Ini mengisi kekosongan bagi saya dan akhirnya memungkinkan saya untuk mengimplementasikan layanan WCF dengan keamanan tingkat pesan. Saya sedang membangun WCF yang harus sesuai dengan HIPPA.
sumber
Saya baru saja menginstal ulang sertifikat saya di mesin lokal dan kemudian berfungsi dengan baik
sumber
Jika Anda menggunakan ApplicationPoolIdentity untuk kumpulan aplikasi Anda, Anda mungkin memiliki masalah dengan menentukan izin untuk "virtual" pengguna dalam editor registri (tidak ada pengguna seperti itu dalam sistem).
Jadi, gunakan subinacl - alat baris perintah yang memungkinkan ACL mengatur registri, atau sesuatu seperti ini.
sumber
Saya hanya ingin menambahkan jawaban cek kewarasan. Saya mendapatkan kesalahan yang sama persis bahkan setelah menginstal sertifikat ke toko yang tepat di komputer saya dan memiliki semua hak keamanan yang tepat untuk klien. Ternyata saya mencampurkan Sertifikat klien dan Sertifikat Layanan saya. Jika Anda telah mencoba semua hal di atas, saya akan mengecek apakah Anda memiliki dua yang benar. Setelah saya melakukan itu, aplikasi saya berhasil memanggil layanan web. Sekali lagi, hanya pemeriksa kewarasan.
sumber
Menerima kesalahan ini saat menggunakan OpenAM Fedlet di IIS7
Mengubah akun pengguna untuk situs web default menyelesaikan masalah. Idealnya, Anda ingin ini menjadi akun layanan. Mungkin bahkan akun IUSR. Sarankan mencari metode untuk pengerasan IIS untuk menghentikannya sepenuhnya.
sumber
Saya menemukan ini dalam proyek fabric service saya setelah sertifikat yang digunakan untuk mengotentikasi terhadap kubah kunci kami kedaluwarsa dan diputar, yang mengubah cap jempol. Saya mendapatkan kesalahan ini karena saya telah melewatkan memperbarui cap jempol di file applicationManifest.xml di blok ini yang tepat melakukan apa yang disarankan jawaban lain - untuk diberikan LAYANAN JARINGAN (yang semua dijalankan sebagai, konfigurasi standar untuk cluster kain biru) izin untuk mengakses lokasi toko LOCALMACHINE \ MY cert.
Perhatikan nilai atribut "X509FindValue".
sumber
Ini adalah satu-satunya solusi yang berhasil untuk saya.
Referensi 1
Referensi 2
sumber
sumber