certutil: chức năng thất bại: thư viện bảo mật: cơ sở dữ liệu xấu


10

Khi tôi đang sử dụng, certutilnó sẽ trả về lỗi này:certutil: function failed: security library: bad database.

ví dụ: tôi không thể liệt kê certs hoặc chìa khóa

Làm thế nào tôi có thể sửa lỗi này?

Câu trả lời:


23

Nếu đó là hệ thống mới, cơ sở dữ liệu chứng chỉ của bạn có thể không được khởi tạo. Để khắc phục điều này, hãy thực hiện:

mkdir -p $HOME/.pki/nssdb
certutil -d $HOME/.pki/nssdb -N

2
Nếu bạn không muốn có mật khẩu trên cơ sở dữ liệu chứng chỉ, hãy thêm công --empty-passwordtắc vào cuối certutillệnh.
Ben Johnson

Tôi thấy rằng nếu tôi chạy thay thế: certutil -d sql:$HOME/.pki/nssdb -Lnó sẽ không dẫn đến lỗi đó. Nhưng nếu tôi chỉ chạy certutil -Lnó sẽ hiển thị lỗi đó. Điều đó có nghĩa là cơ sở dữ liệu không bị hỏng, nhưng có một số không tương thích hoặc certutil mong đợi thư mục sai?
CMCDragonkai

3

Trong trường hợp cơ sở dữ liệu đã được khởi tạo, nhưng vẫn bị hỏng thì phải xây dựng lại:

$ mv ~/.pki/nssdb ~/.pki/nssdb.corrupted
$ mkdir ~/.pki/nssdb
$ chmod 700 ~/.pki/nssdb
$ certutil -d sql:$HOME/.pki/nssdb -N

Kiểm tra nếu làm việc ổn

$ certutil -d sql:$HOME/.pki/nssdb -L
Certificate Nickname                                         Trust Attributes
                                                             SSL,S/MIME,JAR/XPI

Giấy chứng nhận nhập khẩu

$ certutil -d sql:$HOME/.pki/nssdb -A -t "C,," -n GoAgent -i ~/programs/goagent/local/CA.crt

Kể từ lần cập nhật libGNUTLS cuối cùng trên Debian, các trình duyệt của tôi (chrome và iceweasel) không thể mở được. Trên bảng điều khiển tôi có [5284:5310:0306/110217:ERROR:nss_util.cc(750)] After loading Root Certs, loaded==false: NSS error code: -8018và không có cách nào để giải quyết điều này một cách duyên dáng. Xây dựng lại DB đã giải quyết nó cho tôi! Cảm ơn bạn rất nhiều :)
pid

Tôi đã có thể xây dựng lại DB và liệt kê các chứng chỉ sau đó, nhưng quá trình nhập của tôi vẫn không thành công với lỗi: certutil: function failed: SEC_ERROR_BAD_DATABASE: security library: bad database.Lệnh nhập của tôi là certutil -d sql:$HOME/.pki/nssb -A -t "CT,C,C" -n sophos -i ~/Downloads/sophos_cert.crtKhông nên chạy dưới quyền root, phải không?
Cá tráp 29/07/2015

2

Nếu bạn muốn hiển thị các chứng chỉ từ một thư mục cụ thể (ví dụ: thư mục lưu trữ cert8.dbtệp cho Firefox), bạn cần chỉ định thư mục có "-d":

nss-certutil -d /Users/myuser/Library/Application\ Support/Firefox/Profiles/jii912uh.default -L

Nếu không, nss-certutilcó thể cố gắng đọc các tệp * .db từ ~/.netscapethư mục hoặc có thể $HOME/.pki/nssdbnhư người dùng trước đã đề cập.


1

Ngoài ra kiểm tra -dđường dẫn thư mục (phải trỏ đến thư mục) có khoảng trống hay không. Với không gian, nó cung cấp cùng một lỗi hoặc lỗi định dạng tệp xấu - định dạng cơ sở dữ liệu cũ, v.v. Đặc biệt trong Mac, thư mục "Application Support"chứa không gian. Vì vậy, có đường dẫn đầy đủ trích dẫn:

"/Users/myuser/Library/Application Support/Firefox/Profiles/jii912uh.default"

hoặc thêm ký tự thoát \.

 /Users/myuser/Library/Application\ Support/Firefox/Profiles/jii912uh.default

Và kiểm tra xem thư mục có các tệp sau không cert8.db, key3.db and secmob.db.


0

Trong trường hợp của tôi, tôi đã giải quyết vấn đề bằng giải pháp này (Windows XP, nss 3.15.1):

cd /dir/with/database
C:/full/path/to/certutil.exe -L -d .

2
Điều đó thật tuyệt, nhưng câu hỏi chỉ định CentOS.
MadHatter
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.