strongSwan send_cert: khi nào chứng chỉ IKE được gửi
send_cert quyết định một peer có gửi chứng chỉ của mình hay không, còn send_certreq yêu cầu phía bên kia gửi. Hãy xem nhật ký trước khi thay đổi niềm tin của bên nhận.
Các cổng ghi nhật ký các lỗi xác thực liên quan đến chứng chỉ, và phản xạ đầu tiên là thêm một CA nữa cho bên nhận. Điều đó giả định rằng chứng chỉ đã đến và bị từ chối. Khả năng còn lại là nó chưa bao giờ được gửi đi, và chính sách kết nối của bên gửi quyết định điều đó. Hãy xác định trường hợp nào trong hai trường hợp đã xảy ra trước khi thay đổi niềm tin.
send_cert thực sự kiểm soát điều gì
Xác thực bằng chứng chỉ cần chứng chỉ thực thể cuối của peer đến được phía bên kia thông qua trao đổi IKE hoặc qua việc chuẩn bị trước. Trong swanctl, thiết lập kết nối send_cert quyết định điểm cuối này có kèm tải trọng chứng chỉ của nó hay không: không bao giờ, luôn luôn hoặc ifasked. Giá trị mặc định ifasked gửi nó để đáp lại yêu cầu chứng chỉ từ peer. Yêu cầu chứng chỉ là một thiết lập riêng, vì yêu cầu phía bên kia gửi chứng chỉ của họ không giống với việc cung cấp chứng chỉ của chính mình.
Các triển khai ipsec.conf cũ hơn dùng leftsendcert và rightsendcert, và những tên đó tương ứng với vai trò cục bộ và từ xa, không trực tiếp với swanctl.
Hãy đọc một lần thử trước khi sửa kết nối
Chẩn đoán dựa trên một lần thử có kiểm soát, không dựa trên cảm nhận chung rằng có chứng chỉ liên quan. Có thể kiểm tra cả chính sách lẫn liên kết đang hoạt động.
swanctl --list-conns
swanctl --list-sas
journalctl -u strongswan --since "10 min ago" | grep -iE "cert|CERT"
Danh sách kết nối cho thấy giá trị send_cert đã cấu hình, và danh sách SA cho thấy kết nối nào thực sự được dựng lên. Nhật ký bổ sung chi tiết thương lượng: liệu yêu cầu chứng chỉ có được nhận và tải trọng chứng chỉ có được gửi đi hay không. Một lỗi xác thực chung không chỉ ra vấn đề phân phối, vì vậy hãy tìm trao đổi cụ thể trước khi kết luận bất cứ điều gì. Ghi lại dấu thời gian của lần thử để cửa sổ nhật ký bao trùm toàn bộ quá trình bắt tay.
Niềm tin của bên nhận là một quyết định riêng
Phân phối và niềm tin là hai thuộc tính khác nhau, và sửa cái này không sửa được cái kia. Bên nhận phải có neo tin cậy dự định, nhận được chuỗi dùng được và khớp với danh tính peer mong đợi. Chứng chỉ thực thể cuối đến mà không có chứng chỉ trung gian của nó vẫn trượt kiểm tra chuỗi nghiêm ngặt. Ngược lại, việc cài đặt một CA hoàn toàn không buộc peer phải gửi chứng chỉ của mình.
openssl x509 -in peer-chain.pem -noout -subject -issuer -dates
Việc kiểm tra cho thấy nhà phát hành nào đã ký chứng chỉ và khi nào nó hết hạn, và neo của bên nhận phải tương ứng với điều đó. Hãy tin CA phát hành mà triển khai sở hữu, không phải mọi chứng chỉ trung gian trong chuỗi, vì nâng mọi trung gian lên thành gốc sẽ mở rộng niềm tin xa hơn nhiều so với một peer. Giữ xác minh danh tính luôn bật, vì một kết nối chỉ thành công khi tắt xác thực không phải là cách sửa. Ở nơi chuỗi không đầy đủ, hãy sửa việc chuẩn bị thay vì chính sách của bên gửi.
Chỉ thay đổi bên gửi khi có bằng chứng
Khi nhật ký cho thấy chứng chỉ chưa bao giờ được gửi và bên nhận thực sự đã yêu cầu, đặt send_cert thành always là thay đổi có căn cứ cho kết nối đó. Áp dụng nó trong cấu hình swanctl, nạp lại các kết nối và lập phiên mới thay vì dùng lại SA hiện có. Xác nhận rằng tải trọng chứng chỉ giờ đây xuất hiện và bên nhận chấp nhận nó với neo dự định. Nếu không có gì thay đổi, lỗi vẫn nằm ở phía niềm tin và thiết lập bên gửi không phải nguyên nhân.
Ghi trao đổi đã quan sát, neo và kết quả xác minh vào bản ghi thay đổi. Một sửa chữa chứng chỉ không thể mô tả bằng những thuật ngữ đó chỉ là sự trùng hợp.