Các chữ cái trong một lời giải thích RSA đặt tên cho các trường bên trong một đối tượng, không phải các tệp mà một công cụ PKI phát ra. Tệp khóa riêng chứa một cấu trúc mà các trường đầu là công khai và các trường sau không bao giờ được rời khỏi máy kết thúc đường hầm. Giữa hai sự thật đó là phần lớn các câu hỏi thực hành về tệp nào trả lời câu hỏi nào. Hướng dẫn này đọc cấu trúc trước, rồi đến các lệnh kiểm tra nó mà không làm tràn nó.

Xác nhận khóa là RSA trước khi tìm số nguyên tố

Chứng chỉ chứng minh rằng một khóa tồn tại và đã được ký; nó không chứng minh rằng khóa là RSA. Hệ thống có thể được xây trên đường cong elliptic hoặc Ed25519, và cùng một bố cục thư mục phục vụ tất cả. Kiểm tra thuật toán trước khi bắt đầu tìm các thừa số nguyên tố chưa từng ở đó.

Ba lệnh chỉ đọc này trả lời câu hỏi và ghi lại phiên bản công cụ.

openssl version
openssl x509 -in vpn-client.crt -noout -text
openssl pkey -in vpn-client.key -noout -text

Phiên bản quan trọng vì tên tùy chọn đã dịch chuyển giữa các bản phát hành lớn. Trong đầu ra chứng chỉ, tìm dòng thuật toán khóa công khai và kích thước khóa; trong đầu ra khóa, khóa RSA in ra một môđun và một số mũ công khai. Khóa trên đường cong elliptic in ra tên đường cong thay vào đó, và không tìm kiếm nào tạo ra n hay q từ nó.

Đọc cấu trúc thay vì base64

PEM là base64 được bọc trong các dòng tiêu đề, và giải mã nó cho ra DER, tức là một cấu trúc được tuần tự hóa chứ không phải một số nguyên khổng lồ. Khóa riêng RSA di chuyển trong hai vùng chứa phổ biến, PKCS#1 và PKCS#8, và cả hai đều phân giải về cùng một tập số.

Trong trường hợp hai số nguyên tố, cấu trúc riêng mang chín trường: một phiên bản, môđun n, số mũ công khai e, số mũ riêng d, các số nguyên tố p và q, hai số mũ CRT và một hệ số CRT. RFC 8017 mục A.1 định nghĩa các thành phần đó và bố cục ASN.1, và cũng cho phép nhiều hơn hai số nguyên tố, vì thế một bộ phân tích tổng quát có thể in thêm các mục số nguyên tố. Hãy để ý thứ tự, vì nó giải thích một lỗi phổ biến: nửa công khai được lưu bên trong tệp riêng, nên sự hiện diện của một trường công khai không làm cho tệp đó an toàn để chia sẻ. Mọi thứ sau đó là vật liệu phải ở lại trên máy chủ.

Việc mã hóa thêm một lớp dễ bị nhầm với nội dung. openssl asn1parse vẽ cấu trúc như một cái cây để thứ tự các trường trở nên rõ ràng, và nó không giải mã gì cả cũng không cho biết khóa có dùng được hay không.

Ghép chứng chỉ với khóa mà không in khóa

Câu hỏi tiếp theo thường là liệu một chứng chỉ và một khóa có đi cùng nhau không. So sánh các môđun trả lời điều đó, nhưng cũng sao chép vật liệu gần với phần riêng vào một bản ghi terminal có thể kết thúc trong một phiếu. So sánh các nửa công khai trả lời cùng câu hỏi mà không để gì nhạy cảm trên màn hình.

openssl pkey -in vpn-client.key -pubout -out /tmp/key.pub
openssl x509 -in vpn-client.crt -pubkey -noout > /tmp/cert.pub
cmp /tmp/key.pub /tmp/cert.pub && echo MATCH

Các tệp giống hệt nhau nghĩa là chứng chỉ mang nửa công khai của khóa đó, và một khác biệt nghĩa là bạn đang giữ cặp sai. Chính sự không khớp đó là nguyên nhân phổ biến nhất của một đường hầm thương lượng vui vẻ rồi từ chối xác thực. Sau đó hãy xóa hai tệp tạm; chúng không chứa gì bí mật, nhưng một thư mục làm việc sạch thì dễ suy nghĩ hơn giữa một sự cố.

Biết những tệp lân cận không phải là gì

Chứng chỉ không phải là một khóa công khai được mã hóa mà đối phương mở bằng chứng chỉ CA; nó là một ràng buộc được ký giữa khóa công khai và dữ liệu danh tính. Khóa ký riêng của CA vẫn tách khỏi chứng chỉ của chính nó và khỏi mọi khóa khách hàng. Một yêu cầu cũng không phải chứng chỉ: nó mang thông tin được yêu cầu và khóa công khai cùng một chữ ký trên yêu cầu, điều này làm nó thành đầu vào đăng ký chứ không phải bằng chứng về quyền.

FileAnswersDoes not prove
vpn-client.keyPossession of the private keyThat the identity is enrolled
vpn-client.crtA signed binding of public key to identityThat the client holds the matching key
vpn-client.csrThe requested binding and public keyThat access was granted
dh2048.pemGroup parameters for key exchangeAny RSA component
crl.pemRevocation status for certificatesAnything about a private key

Hai trong số các mục đó bị nhầm với tham số RSA đủ thường xuyên để phải gọi tên hai lần. Một tệp tham số Diffie-Hellman chứa tham số nhóm để thiết lập khóa và không có số nguyên tố RSA nào, dù nó cũng được in ra như một số nguyên tố lớn. Một danh sách thu hồi công bố trạng thái chứng chỉ và không phải là nơi một số mũ riêng có thể ẩn náu.

Vì vậy mỗi dòng kiểm kê nên ghi bốn điều: loại đối tượng, chủ sở hữu, mục đích và liệu có bao gồm vật liệu riêng hay không. Cột cuối quyết định nơi có thể sao chép tệp, và đó là cột mà mọi người bỏ qua.

Ghi lại việc ghép cặp, rồi xác minh bắt tay

Trước khi thay đổi bất cứ điều gì, hãy lưu đầu ra xác minh cùng ngày và phiên bản OpenSSL. Khi đó một lần luân chuyển sau này có thể được so sánh với bằng chứng thay vì với trí nhớ.

openssl verify -CAfile ca.crt vpn-client.crt
openssl x509 -in vpn-client.crt -noout -subject -issuer -dates

Sau khi so sánh khóa công khai, hãy đi qua con đường tiêu thụ cặp khóa: dựng đường hầm lên, xác nhận chứng chỉ được trình bày và chấp nhận, và kiểm tra danh tính nào đã được cổng ghi lại. Nếu khóa và chứng chỉ khớp nhau mà xác thực vẫn thất bại, lỗi nằm ở sự tin cậy, ánh xạ danh tính hoặc chính sách truy cập, không phải ở cặp khóa.

Để quay lui, hãy giữ khóa và chứng chỉ trước đó trong một thư mục có ghi ngày và khôi phục cả hai cùng nhau, không bao giờ chỉ một trong hai. Một khóa không có chứng chỉ và một chứng chỉ không có khóa thất bại giống nhau từ bên ngoài, điều này làm cho các cặp khôi phục nửa vời trở nên tốn kém để gỡ rối lúc hai giờ sáng.

Bài viết liên quan