Không thể thoát khỏi lỗi `net :: ERR_CERT_COMMON_NAME_INVALID` trong chrome với chứng chỉ tự ký


19

Có rất nhiều câu hỏi trên web nơi mọi người đang gặp khó khăn khi thiết lập chứng chỉ tự ký để sử dụng trên mạng nội bộ.

Chỉ cần liên kết một số:
Bắt Chrome chấp nhận chứng chỉ localhost tự ký
Chrome chấp nhận chứng chỉ localhost tự ký
Tạo chứng chỉ tự ký với openssl hoạt động trong Chrome 58
Chứng chỉ StartCom Lỗi: ERR_CERT_AUTHORITY_INVALID

Tôi đã trải qua từng người trong số họ nhưng vẫn không thể thoát khỏi (net::ERR_CERT_COMMON_NAME_INVALID).lỗi.

Các bước tiếp theo:

  • tạo khóa & chứng chỉ trên máy chủ

    openssl req \          
    -newkey rsa:2048 \
    -x509 \
    -nodes \
    -keyout file.key \
    -new \
    -out file.crt \
    -subj /CN=Hostname \
    -reqexts SAN \
    -extensions SAN \
    -config <(cat /etc/ssl/openssl.cnf \
        <(printf '[SAN]\nsubjectAltName=DNS:192.168.0.1')) \
    -sha256 \
    -days 3650
    
  • thiết lập quy trình máy chủ (apache) để sử dụng chứng chỉ và tệp khóa được tạo mới cho các kết nối an toàn

  • xuất tệp chứng chỉ từ máy chủ sang máy khách bằng cách điều hướng đến https://192.168.0.1:3122 thông qua Chrome Dev Tools và sử dụng tùy chọn Xuất
  • thêm CA vào danh sách các Cơ quan cấp chứng chỉ đã biết (trên Fedora 26) bằng cách sử dụng
    • certutil
    • sudo cp file.crt /etc/pki/ca-trust/source/anchors; sudo upate-ca-trust
  • khởi động lại chrome

Tôi cũng đã thử các giá trị khác nhau cho các CNlĩnh vực nói trên như: hostname, common.name.com, Common Name,192.168.0.1

Ngay cả sau khi tất cả điều này, lỗi vẫn tồn tại khi tôi điều hướng đến https://192.168.0.1:3122 và tôi không còn biết mình đang làm gì nữa.

Các đại diện văn bản trông tương tự như:

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            9e:ae:33:24:3a:2d:2b:e2
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: CN = Hostname
        Validity
            Not Before: Oct 28 20:18:06 2017 GMT
            Not After : Oct 26 20:18:06 2027 GMT
        Subject: CN = Hostname
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:a4:80:6c:3a:1b:5e:c4:e6:f6:7d:a5:be:d6:cd:
                    d9:23:bd:1a:b1:e6:f1:e3:b0:76:47:37:a3:d8:b0:
                    60:44:23:c3:8a:58:1c:c3:0a:99:3d:42:32:ca:8b:
                    ec:31:9d:a8:df:6c:13:43:e6:78:12:b8:24:04:5a:
                    9f:6e:11:24:2a:56:e3:20:36:78:a4:cc:ed:45:7c:
                    a3:c1:36:7b:25:f6:6b:2d:01:59:02:74:8b:7a:13:
                    ec:83:63:90:2e:a0:a3:aa:23:de:ea:f0:8e:1f:99:
                    b9:50:b1:5f:64:e4:c9:91:c0:0c:56:15:3c:c0:ff:
                    0f:bf:e1:af:7a:bf:51:40:37:b0:34:20:95:a1:05:
                    14:k2:35:20:e8:98:48:65:ad:26:cc:de:a2:50:48:
                    77:8c:e2:7a:d5:bd:83:96:86:ef:20:79:2f:15:a3:
                    07:48:f4:1f:c7:9d:a1:4b:bd:ee:47:83:51:f3:09:
                    27:ed:b7:09:c8:56:40:0c:68:25:92:d8:62:dc:14:
                    6c:fa:f1:e3:93:1b:79:3c:58:9c:53:69:ff:6a:0f:
                    ee:4c:9f:8e:22:2d:62:6b:b3:ae:22:d6:e3:d0:bd:
                    06:43:a7:c3:e1:1e:23:07:61:b0:4e:64:14:92:0c:
                    5b:f1:a8:c5:29:67:64:7d:65:10:b9:60:41:b8:3b:
                    1y:1f
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Subject Alternative Name:
                DNS:192.168.0.1
    Signature Algorithm: sha256WithRSAEncryption
         11:65:6d:86:04:7f:5a:b0:ce:b2:6e:95:7e:03:8c:fe:a9:d0:
         81:2c:6f:50:63:2e:91:77:79:cd:27:32:b0:19:2b:ac:ea:c0:
         4b:f7:56:d9:be:34:54:f1:a6:1d:bc:d0:3b:bb:bf:90:0e:2d:
         1d:83:28:97:8e:f8:37:5d:3e:00:5a:cd:3d:36:5d:c4:5d:a8:
         7e:a4:59:f0:91:3d:af:3d:28:03:3e:78:3b:5b:0a:fb:24:34:
         02:a2:09:ec:d6:0c:58:63:ab:69:26:5e:fe:1d:1f:19:54:0f:
         68:4e:31:f9:de:1e:de:86:81:3f:b7:62:c5:67:02:05:a2:7a:
         03:f4:b5:3b:ba:c4:ba:26:8e:a2:ee:1c:ef:69:63:07:b0:97:
         fd:a8:42:e2:11:6d:de:b5:70:a5:4a:62:d2:62:d9:5b:17:f4:
         d5:cd:6f:71:75:dd:35:33:55:52:2e:30:29:f8:42:ec:b9:d3:
         82:85:a1:e7:f6:f5:90:dd:cb:07:15:a7:44:70:1c:93:e6:ec:
         03:3a:be:41:87:3c:f0:a4:88:a5:65:d9:29:2c:78:de:90:b8:
         6a:8b:99:6e:d0:e5:8c:08:a4:71:51:fd:1d:e1:8c:0c:17:d5:
         b0:31:fc:7f:99:23:dd:1a:c4:0b:45:17:68:88:67:c6:22:df:
         2b:ac:ea:c0

Xin lưu ý rằng đây là lần đầu tiên tôi thiết lập chứng chỉ SSL / TLS cho các mục đích đó. Xin tư vấn về cách thoát khỏi lỗi.


Thêm một đại diện văn bản của chứng chỉ của bạn vào câu hỏi của bạn. Sử dụng openssl x509 -noout -text -in <filename>.
garethTheRed

Tôi đã thêm đại diện văn bản.
Ashesh Kumar Singh

Tôi nghĩ, Chrome hy vọng địa chỉ IP sẽ được mã hóa thành địa chỉ IP trong phần mở rộng SAN chứ không phải tên DNS.
Tiền điện tử

Câu trả lời:


25

Chrome 58+ không còn phù hợp với Tên chung ( CN) trong certs.

Bây giờ, nó sử dụng Tên thay thế chủ đề ( SAN) thay thế.

SANphải chứa đúng DNShoặc IPnhập.

  • Khi DNS được sử dụng, nó phải là một tên FQDN có thể phân giải.
  • Khi một địa chỉ IP được sử dụng, nó phải được chỉ định rõ ràng như vậy trong SANchuỗi.

Điều đó nói rằng, điều này sẽ làm việc:

openssl req \
-newkey rsa:2048 \
-x509 \
-nodes \
-keyout file.key \
-new \
-out file.crt \
-subj /CN=Hostname \
-reqexts SAN \
-extensions SAN \
-config <(cat /etc/ssl/openssl.cnf \
    <(printf '[SAN]\nsubjectAltName=DNS:hostname,IP:192.168.0.1')) \
-sha256 \
-days 3650

1
Cụ thể, điều này là do tools.ietf.org/html/rfc6125#section-5.7.3.1 trong đó nêu rõ "Đối với xác thực TLS với chứng chỉ X.509, một danh tính từ không gian tên DNS PHẢI được kiểm tra đối với từng đối tượng mở rộng Kiểu dNSName trong chứng chỉ. Nếu không có phần mở rộng như vậy, thì danh tính PHẢI được so sánh với Tên chung (cụ thể nhất) trong trường Chủ đề của chứng chỉ. " Vì vậy, nếu có SAN tồn tại thì CN không được kiểm tra.
Jason Martin

7
Sửa lỗi cho tôi nếu tôi sai, nhưng Chrome không còn chấp nhận các chứng chỉ dự phòng thành tên chung. Vì vậy, ngay cả khi SAN không tồn tại, CN không được kiểm tra. Vì vậy, SAN dường như bắt buộc.
krisFR

@krisFR đúng vì tôi đã thử với các chứng chỉ mà không có phần mở rộng SAN không thành công. Chỉ định trường IP là giải pháp.
Ashesh Kumar Singh

1
Cứu người. Đối với bất kỳ ai đang thử điều này trên Windows, Cygwin đi kèm với một bản sao openssl.cnf tại đây :. \ Cygwin \ etc \ mặc định \ etc \ pki \ tls \ Ngoài ra, tôi đã phải thay đổi dòng CN = tên máy chủ và DNS: tên máy chủ của mình thành localhost thay vì tên máy chủ
abelito

Làm việc hoàn hảo! Đã có thêm giấy chứng nhận với thủ tục này: corvil.com/kb/...
Yota
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.