Tôi đã mua hai chứng chỉ SSL ký tự đại diện, tên miền duy nhất từ Namecheap/Sectigo/Comodo. Tôi đã tạo CSR của mình theo cách thông thường bằng cách sử dụng openssl.
$ openssl req -newkey rsa:4096 -keyout example.com.rsa.key -out example.com.rsa.csr
$ openssl genpkey -genparam -algorithm ec -pkeyopt ec_paramgen_curve:P-256 -out example.com.ecdsa.pem
$ openssl req -newkey ec:example.com.ecdsa.pem -keyout example.com.ecdsa.key -out example.com.ecdsa.csr
Tôi đã gửi CSR và được cấp từng gói chứng chỉ bao gồm .crt và .ca-bundle, tất cả đều như mong đợi.
Tôi đã có thể cài đặt cả hai chứng chỉ để Postfix sử dụng. Mỗi yêu cầu một phiên bản khóa riêng không được mã hóa, các quyền an toàn đã được duy trì.
$ openssl rsa -in example.com.rsa.key -out example.com.rsa.key.unencrypted
$ openssl ec -in example.com.ecdsa.key -out example.com.ecdsa.key.unencrypted
Tôi đã thiết lập chính xác SPF, DKIM, DMARC và DNSSEC, từng công cụ của bên thứ ba đã xác nhận và đã gửi và nhận thư có điểm vượt qua trong tiêu đề.
Tôi lại sử dụng openssl để tạo hàm băm của chứng chỉ cho bản ghi DANE TLSA của mình. Tôi đã tạo hai bộ, một bộ cho mỗi thuật toán và cho cả cổng 25 và 587. Các bộ này được thêm vào tệp vùng của tôi, được kiểm tra bằng vùng kiểm tra có tên, được ký bằng dnssec-signzone và xuất bản trong DNS.
Tôi bắt đầu bằng cách sử dụng hai công cụ bên ngoài để kiểm tra cấu hình, công cụ đầu tiên tại danecheck và thứ hai tại dane.sys4.de. Cả hai đều báo cáo thành công chung khi sử dụng chứng chỉ RSA nhưng lỗi cụ thể của chứng chỉ ECDSA.
Cái trước đã thành công, báo cáo một phần:
DANE TLSA 3 1 1 [9679fc29..]: Chứng chỉ EE phù hợp OK
DANE TLSA 3 1 1 [ecd29ffd..]: FAIL không khớp với chứng chỉ EE
Cái sau đã thành công, báo cáo một phần:
3, 1, 1 9679fc296960a23c[...]149b990a680cad8b *màu xanh lục*
3, 1, 1 ecd29ffd76d61326[...]dadbcfa42eae9158 - không thể lấy chứng chỉ nhà phát hành địa phương: (20) *màu đỏ*
Tôi đã cố gắng khắc phục điều này bằng cách thay đổi các trường sử dụng, bộ chọn và đối sánh khác nhau, 3 0 1, 3 1 1, v.v. Tôi đã thử tạo các giá trị băm cục bộ bằng openssl và bằng cách sử dụng các công cụ trực tuyến như gen_tlsa. Cả hai công cụ đều tạo ra kết quả băm giống hệt nhau cho cả hai chứng chỉ. Một lần nữa, RSA TLSA đã thành công trong khi bản ghi ECDSA không thành công. Cuối cùng, tôi đã tìm thấy tập lệnh chaingen, tập lệnh này tạo ra tất cả các giá trị băm 3 0 1, 3 1 1, 3 0 2 và 3 1 2 mà tôi đã đưa vào cho mỗi cổng mà không cải thiện bản ghi ECDSA.
Tôi đã dành vài giờ để thử các hoán vị khác nhau của từng chứng chỉ, bản ghi TLSA, cổng, v.v. Tôi đã thử thêm bản ghi TLSA (2 0 1) cho các khóa chính của bản ghi ECDSA vào DNS. Tôi đã thử thay đổi chứng chỉ có sẵn thành Postfix để bao gồm gói ca cùng với chứng chỉ trong tệp .pem.
Nghiên cứu tôi thấy bài đăng này tại người dùng exim có tiêu đề "Làm thế nào để có được chứng chỉ ec được sử dụng với chứng chỉ DANE và ec+rsa" của Viktor Dukhovni, người không cần giới thiệu trong vòng kết nối Postfix/DANE.Anh ấy gợi ý rằng có lẽ các công cụ trực tuyến mang tính cơ hội và ngay sau khi chúng thành công với chứng chỉ RSA, họ đã không thèm thử nghiệm với chứng chỉ ECDSA. Anh ấy đã cung cấp các cuộc gọi rất có giá trị tới openssl để cho thấy rằng thực sự các khóa là chính xác trong tình huống của người đăng. Tôi đã nhân đôi nỗ lực đó bằng hai tập lệnh shell ngắn sử dụng mã của Viktor để thay thế thông tin của tôi, một có tên là checkrsa và một có tên là checkecdsa.
Hai tập lệnh thực thi hai lệnh, mỗi lệnh có thiết lập sau cho checkrsa (dành cho IPv4):
$ mèo checkrsa
tiếng vang "bỏ" | openssl s_client -starttls smtp -connect mail.example.com:25 -4 -verify 9 \
-dane_tlsa_domain mail.example.com \
-dane_tlsa_rrdata "3 0 1 c487cdb079b49d12ee357d9547c6f67448a2ec2e789c86c65d213a57aaec4ac9" \
-dane_tlsa_rrdata "3 1 1 9679fc296960a23c89fed73d8e6a6d0ab33f0abc99d48c44149b990a680cad8b" \
-sigalgs rsa_pkcs1_sha256:rsa_pkcs1_sha384:rsa_pkcs1_sha512:rsa_pss_rsae_sha256:rsa_pss_rsae_sha384:rsa_pss_rsae_sha512:rsa_pss_pss_sha256:rsa_pss_pss_sha384:rsa_pss_pss_sha256:rsa_pss_pss_sha384:rsa_pss_pss_sha
Và checkecdsa (đối với IPv6):
kiểm tra $ mèo
tiếng vang "bỏ" | openssl s_client -starttls smtp -connect mail.example.com:25 -6 -verify 9 \
-dane_tlsa_domain mail.example.com \
-dane_tlsa_rrdata "3 0 1 87a8c75581c9d022062416a37387de1ec30d311e4d7afbeb892be287fb13bfc5" \
-dane_tlsa_rrdata "3 1 1 ecd29ffd76d6132629ddbf7ccd31460e23ac3b4a50d47bccdadbcfa42eae9158" \
-sigalgs ecdsa_secp256r1_sha256:ecdsa_secp384r1_sha384:ecdsa_secp521r1_sha512
Kết quả:
root@server:~/bin# ./checkrsa
xác minh độ sâu là 9
ĐÃ KẾT NỐI(00000003)
độ sâu=0 CN = *.example.com
xác minh trả lại: 1
---
Chuỗi chứng chỉ
0 s:CN = *.example.com
i:C = GB, ST = Greater Manchester, L = Salford, O = Sectigo Limited, CN = Máy chủ bảo mật xác thực tên miền Sectigo RSA CA
---
Chứng chỉ máy chủ
-----BẮT ĐẦU GIẤY CHỨNG NHẬN----
MIIHNDCCBhygAwIBAgIQAzfJZrX65NjG2FvLmk0I0jANBgkqhkiG9w0BAQsFADCB
...
Xw8UgZDYihDaIxT8SUQUgV9weQg5Lkru
-----GIẤY CHỨNG NHẬN KẾT THÚC-----
chủ đề=CN = *.example.com
nhà phát hành=C = GB, ST = Greater Manchester, L = Salford, O = Sectigo Limited, CN = Máy chủ bảo mật xác thực tên miền Sectigo RSA CA
---
Không có tên CA chứng chỉ ứng dụng khách nào được gửi
Thông báo ký ngang hàng: SHA256
Loại chữ ký ngang hàng: RSA-PSS
Khóa tạm thời máy chủ: X25519, 253 bit
---
Bắt tay SSL đã đọc 2904 byte và ghi 386 byte
Xác minh: OK
Tên ngang hàng đã được xác minh: *.example.com
DANE TLSA 3 1 1 ...99d48c44149b990a680cad8b phù hợp với chứng chỉ EE ở độ sâu 0
---
Mới, TLSv1.3, Mật mã là TLS_AES_256_GCM_SHA384
Khóa công khai của máy chủ là 4096 bit
Đàm phán lại an toàn KHÔNG được hỗ trợ
Nén: KHÔNG CÓ
Mở rộng: KHÔNG CÓ
Không có ALPN nào được thương lượng
Dữ liệu ban đầu không được gửi
Xác minh mã trả lại: 0 (ok)
---
250 CHUYỆN
XONG
root@server:~/bin# ./checkecdsa
xác minh độ sâu là 9
ĐÃ KẾT NỐI(00000003)
độ sâu=0 CN = *.example.com
xác minh trả lại: 1
---
Chuỗi chứng chỉ
0 s:CN = *.example.com
i:C = GB, ST = Greater Manchester, L = Salford, O = Sectigo Limited, CN = Sectigo
Máy chủ bảo mật xác thực tên miền ECC CA
---
Chứng chỉ máy chủ
-----BẮT ĐẦU GIẤY CHỨNG NHẬN----
MIIEqDCCBE6gAwIBAgIRAIIKQBNWh2R9wwvn2/j30PgwCgYIKoZIzj0EAwIwgY8x
...
YemreHq/Cd5HPgIgE6InSF5ko6mWo9GMpR7w1ijpbsnShlS6EiYrpZozD0s=
-----GIẤY CHỨNG NHẬN KẾT THÚC-----
chủ đề=CN = *.example.com
nhà phát hành=C = GB, ST = Greater Manchester, L = Salford, O = Sectigo Limited, CN = Máy chủ bảo mật xác thực tên miền Sectigo ECC CA
---
Không có tên CA chứng chỉ ứng dụng khách nào được gửi
Thông báo ký ngang hàng: SHA256
Loại chữ ký ngang hàng: ECDSA
Khóa tạm thời máy chủ: X25519, 253 bit
---
Bắt tay SSL đã đọc 1811 byte và ghi 348 byte
Xác minh: OK
Tên ngang hàng đã được xác minh: *.example.com
DANE TLSA 3 1 1 ...50d47bccdadbcfa42eae9158 phù hợp với chứng chỉ EE ở độ sâu 0
---
Mới, TLSv1.3, Mật mã là TLS_AES_256_GCM_SHA384
Khóa công khai của máy chủ là 256 bit
Đàm phán lại an toàn KHÔNG được hỗ trợ
Nén: KHÔNG CÓ
Mở rộng: KHÔNG CÓ
Không có ALPN nào được thương lượng
Dữ liệu ban đầu không được gửi
Xác minh mã trả lại: 0 (ok)
---
250 CHUYỆN
XONG
Vì vậy, cả hai chứng chỉ đều kiểm tra cục bộ, nhưng tiếp tục bị lỗi bên ngoài.
Thấy rằng thông báo của Viktor chỉ ra rằng có lẽ các công cụ đã thành công với RSA được bảo lãnh trên các hàm băm ECDSA, tôi cũng đã thử xuất bản các bản ghi ECDSA TLSA. Kết quả cho thấy sự thất bại hoàn toàn chỉ với các hàm băm ECDSA của riêng chúng.
Vì vậy, tôi để với tình huống này:
Tôi có hai bộ chứng chỉ SSL, một RSA, một ECDSA.
Cả hai chứng chỉ đều thành công trong Postfix.
Cả hai certs kiểm tra với openssl.
Xuất bản cả hai chứng chỉ vượt qua tổng thể, dựa trên chứng chỉ RSA, lưu ý rằng chứng chỉ ECDSA không thành công.
Chứng chỉ ECDSA thành công tại địa phương, nhưng thất bại ở bên ngoài.
Tôi không biết phải bắt đầu từ đâu và đang tìm trợ giúp để thiết lập chứng chỉ ECDSA song song với bản ghi RSA của tôi cho DANE.