Tôi đặt một CA tự ký nhỏ cho môi trường dev của tôi. Tôi muốn tạo nhiều chứng chỉ máy chủ khác nhau với các thuộc tính khác nhau. Cách tiếp cận của tôi là tạo một phần mở rộng cụ thể cho mỗi máy chủ. Tôi có một openssl.cnf lớn chứa các phần như thế này:
[ server0_http ]
nsCertType = server
nsComment = "HTTP server0"
basicConstraints=CA:FALSE
extendedKeyUsage=serverAuth
subjectAltName=@server0_http_altnames
[ server0_http_altnames ]
URI.1 = https://server.domain.tld
URI.2 = http://server.domain.tld
IP.1 = 1.2.3.4
DNS.1 = server.doamin.tld
Sau đó, khi tôi tạo csr của mình bằng cách openssl
sử dụng các tham số -config myCustomOpenssl.cnf -reqexts server0_http
. Khi tôi nhìn vào yêu cầu của tôi bằng cách sử dụng openssl req -text -noout -in myrequest.csr
mọi thứ có vẻ hoàn hảo.
Tuy nhiên, sau khi tôi ký yêu cầu, phần "Sử dụng khóa mở rộng X509v3" và "Tên thay thế chủ đề X509v3" đã biến mất. Để khắc phục vấn đề này, tôi cũng đặt -extfile myCustomOpenssl.cnf -reqexts server0_http
các tham số cho cuộc gọi ký kết openssl
.
Đó có phải là hành vi dự kiến? Tôi luôn nghĩ rằng tệp csr một mình phải đủ để tạo chứng chỉ theo yêu cầu, tức là với tất cả các phần của nó. Cách hệ thống của tôi hoạt động ngay bây giờ là tôi nhận được một chứng chỉ với các phần bị thiếu. Để có được chứng chỉ như tôi muốn, tôi phải cung cấp tệp csr và phần tương ứng từ tệp cấu hình openssl mà tôi đã sử dụng để tạo yêu cầu. Điều này không có vấn đề gì đối với thiết lập nhỏ của tôi, nhưng điều này trở nên khá lộn xộn nếu tôi trở thành một CA lớn hơn. Nó được cho là như thế hay tôi đang sử dụng openssl không chính xác?