Tạo chứng chỉ tự ký cho miền và các miền phụ - NET :: ERR_CERT_COMMON_NAME_INVALID


82

Tôi đã làm theo hướng dẫn này để tạo chứng chỉ SSL đã ký trên Windows cho mục đích phát triển và nó hoạt động tốt cho một trong các miền của tôi (tôi đang sử dụng tệp máy chủ để mô phỏng dns). Sau đó, tôi nhận ra rằng tôi có rất nhiều tên miền phụ và đó sẽ là một khó khăn trong việc tạo chứng chỉ cho từng tên miền đó. Vì vậy, tôi đã thử tạo chứng chỉ bằng ký tự đại diện trong Commontrường như được đề xuất trong một số câu trả lời tại serverfault. Như thế này:

Common Name: *.myserver.net/CN=myserver.net

Tuy nhiên, sau khi nhập chứng chỉ này vào Tổ chức phát hành chứng chỉ gốc đáng tin cậy, tôi gặp NET::ERR_CERT_COMMON_NAME_INVALIDlỗi trong Chrome, đối với miền chính và tất cả các miền phụ của nó, ví dụ: https://sub1.myserver.nethttps://myserver.net.

Máy chủ này không thể chứng minh rằng nó là myserver.net; chứng chỉ bảo mật của nó là từ * .myserver.net / CN = myserver.net.

Điều này có thể do định cấu hình sai hoặc kẻ tấn công chặn kết nối của bạn.

Có điều gì đó sai trong trường Tên chung gây ra lỗi này?


Đã dành nhiều thời gian để cố gắng khắc phục điều này. Xem câu trả lời của tôi tại đây stackoverflow.com/questions/42816218/…
Alex Vasilev

Câu trả lời:


20

Như Rahul đã nói, đó là một Chrome phổ biến và một lỗi OSX. Tôi đã gặp vấn đề tương tự trong quá khứ. Trên thực tế, cuối cùng tôi đã cảm thấy mệt mỏi khi thực hiện thêm 2 lần nhấp chuột [vâng, tôi biết là không nhiều] khi thử nghiệm một trang web địa phương để làm việc.

Đối với một giải pháp khả thi cho vấn đề này [sử dụng Windows], tôi sẽ sử dụng một trong nhiều tiện ích chứng chỉ tự ký có sẵn .

Các bước được đề xuất:

  1. Tạo thông báo tự ký
  2. Nhập Chứng chỉ vào Trình quản lý Chứng chỉ Windows
  3. Nhập chứng chỉ trong Trình quản lý chứng chỉ của Chrome
    LƯU Ý: Bước 3 sẽ giải quyết vấn đề gặp phải sau khi Google giải quyết lỗi ... coi như đã quá thời gian nên không có ETA trong tương lai gần. **

    Tôi thích sử dụng Chrome hơn bao nhiêu gần đây, tôi đã thấy mình trong Firefox Developer Edition . mà không có vấn đề này.

    Hi vọng điêu nay co ich :)

Lỗi mà bạn đã liên kết là A) chỉ hợp lệ với OS X và B) liên quan đến các miền có dấu ".", Cả hai đều không hợp lệ với @Zed.
Philip

Hmm đó sẽ là liên kết nào?
Thomas.Donnelly

Liên kết đến lỗi crôm (98627)
Philip

Bất kể bản sửa lỗi tôi đề xuất cũng hoạt động trên Windows vì tôi đã sử dụng nó nhiều lần.
Thomas.Donnelly

"Tôi thích sử dụng Chrome hơn để phát triển, gần đây tôi đã tìm thấy bản thân mình trong Firefox Developer Edition. Phiên bản này không có vấn đề này." không thể đồng ý nhiều hơn ở đây ..
Ash


26

Một cách giải quyết là thêm tên miền bạn sử dụng làm "subjectAltName" (Tên thay thế chủ đề X509v3). Điều này có thể được thực hiện bằng cách thay đổi cấu hình OpenSSL của bạn ( /etc/ssl/openssl.cnftrên Linux) và sửa đổi v3_reqphần để trông giống như sau:

[ v3_req ]

# Extensions to add to a certificate request

basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = myserver.net
DNS.2 = sub1.myserver.net

Với điều này tại chỗ, đừng quên sử dụng công -extensions v3_reqtắc khi tạo chứng chỉ mới của bạn. (xem thêm Làm cách nào để tạo chứng chỉ tự ký với SubjectAltName bằng OpenSSL? )


1
Việc sử dụng subjectAltName = @alt_nameshoàn toàn giải quyết được vấn đề của tôi. Trước đây, tôi đã ràng buộc danh tính DNS với miền của mình bằng cách cung cấp nó CN=*.example.com. Thiết lập DNS.1 = example.comDNS.2 = *.example.comthực hiện thủ thuật. Điều kỳ lạ (đối với tôi) là tất cả đều hoạt động cho đến ~ 2017-03-17 và dừng một ngày sau đó (đã chạy một loạt lớn các bản cập nhật Windows). Tuy nhiên, không có gì phá vỡ đối với tôi trên Linux, đây chỉ là Chrome , Firefox trên Windows .
bossi

@bossi: Rất tiếc, tôi gặp sự cố này trên Chrome / Ubuntu. Và cert không có gì lạ, máy chủ duy nhất, DN đơn (kho lưu trữ GitLab nội bộ).
Pawel Kraszewski

Nó đã hoạt động cách đây một tuần, không có gì thay đổi trên máy chủ. 2 máy chủ khác bắt đầu hoạt động do chữ hoa-thường không khớp (cert là chữ hoa, Chrome giảm địa chỉ thành chữ thường)
Pawel Kraszewski

2
@bossi Tôi cá rằng phiên bản Windows của bạn đang trên đà thử nghiệm, phải không? Chrome đã ngừng sử dụng chứng chỉ không có phiên bản subjectAltName Chrome 58 hiện đang trong giai đoạn thử nghiệm. Điều này làm tôi khó chịu vì không những tôi không thấy gì về nó, mà tên lỗi rất dễ gây hiểu lầm (nó không phải là tên chung không hợp lệ!) Tôi thì ngược lại với bạn; nó chỉ xảy ra trên Linux đối với tôi vì vậy tôi đã dành hàng giờ cố gắng sửa chữa cửa hàng cert địa phương của mình ở đó.
Tobias J

2
@TobyJ 58.0.3029.19 beta (64-bit)đúng là như vậy. Tôi đã tạo lại cây cert với đúng subjectAltName-s và mọi thứ hiện hoạt động. Và tôi đồng ý, thông báo lỗi rất dễ gây hiểu lầm, vì nó không phải CommonNamelà không hợp lệ. Nếu thông báo có nội dung "Chứng chỉ bị thiếu đúng subjectAltName" , mọi người sẽ vui hơn nhiều.
Pawel Kraszewski

17

Tạo openssl.conftệp:

[req]
default_bits = 2048
default_keyfile = oats.key
encrypt_key = no
utf8 = yes
distinguished_name = req_distinguished_name
x509_extensions = v3_req
prompt = no

[req_distinguished_name]
C = US
ST = Cary
L = Cary
O  = BigCompany
CN = *.myserver.net

[v3_req]
keyUsage = critical, digitalSignature, keyAgreement
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.1 = myserver.net
DNS.2 = *.myserver.net

Chạy comand này:

openssl req -x509 -sha256 -nodes -days 3650 -newkey rsa:2048 -keyout app.key -out app.crt  -config openssl.conf

Đầu ra các tệp app.crtapp.keylàm việc cho tôi.


2
Có một lỗi đánh máy trong DNS.1 = *.myserver.net. Nên DNS.2 = *.myserver.net. Hoạt động tốt cho tôi.
Artem Stepin

2
nếu bạn đang sử dụng windows, điều này có thể được thực hiện bằng cách sử dụng openssl được cài đặt bằng git bằng cách sử dụng cmd chạy với tư cách quản trị viên và vị trí sau: "C: \ Program Files \ Git \ usr \ bin \ openssl.exe" req -x509 -sha256 -nodes -days 3650 -newkey rsa: 2048 -keyout app.key -out app.crt -config openssl.conf
George

Tôi đã viết CN = localhost, DNS.1 = localhost, DNS.2 = * .localhost: 8080 và nó không hoạt động với tôi. Tôi nên thay đổi điều gì khác?
Esqarrouth

14

Wildcard của bạn *.example.comkhông không bao gồm các tên miền gốc example.comnhưng sẽ bao gồm bất kỳ biến thể trên một tiểu -domain nhưwww.example.com haytest.example.com

Phương pháp ưa thích là thiết lập Tên Thay thế Chủ đề như trong Câu trả lời của Fabian nhưng hãy nhớ rằng Chrome hiện yêu cầu Tên Thông dụng được liệt kê bổ sung dưới dạng một trong các Tên Thay thế Chủ đề (vì nó được minh họa chính xác trong câu trả lời của anh ấy). Gần đây tôi đã phát hiện ra sự cố này vì tôi có Tên chung example.comvới SAN www.example.comtest.example.comnhưng nhận được NET::ERR_CERT_COMMON_NAME_INVALIDcảnh báo từ Chrome. Tôi đã phải tạo Yêu cầu ký chứng chỉ mới với example.comcả Tên chung một trong các SAN. Sau đó, Chrome hoàn toàn tin tưởng vào chứng chỉ. Và đừng quên nhập chứng chỉ gốc vào Chrome làm cơ quan đáng tin cậy để xác định trang web.


Nếu bất kỳ ai đọc bài này sử dụng Pantheon để lưu trữ, họ dường như đặt lại tên chung được liên kết với chứng chỉ của bạn khi bạn tải nó lên nền tảng của họ, tạo ra vấn đề này. Bạn phải kiểm tra IP tĩnh tùy chỉnh mà họ cung cấp cho bạn để xem liệu tên chung của chứng chỉ có còn nguyên vẹn trong quá trình thiết lập hay không.
serraosays

1
Xuất sắc! "Ký tự đại diện * .example.com của bạn không bao gồm miền gốc example.com nhưng sẽ bao gồm bất kỳ biến thể nào trên miền phụ, chẳng hạn như www.example.com hoặc test.example.com." Đây chính xác là vấn đề trong trường hợp của tôi. Cách khắc phục đơn giản là đưa cả hai DNS.1 = example.comDNS.2 = *.example.comdưới [alt_names]vào openssl.cnf.
Ben Johnson

5

Tôi nghĩ rằng nó có thể là một lỗi trong chrome. Đã có một vấn đề tương tự từ lâu: Xem này.

Hãy thử trong một trình duyệt khác. Tôi nghĩ rằng nó sẽ hoạt động tốt.


1

Đối với tất cả những ai đang gặp phải vấn đề này và muốn chấp nhận rủi ro để kiểm tra nó, có một giải pháp: chuyển đến chế độ Ẩn danh trong Chrome và bạn sẽ có thể mở "Nâng cao" và nhấp vào "Tiếp tục với một số.url".

Điều này có thể hữu ích nếu bạn cần kiểm tra một số trang web mà bạn đang tự bảo trì và chỉ kiểm tra với tư cách là nhà phát triển (và khi bạn chưa định cấu hình chứng chỉ phát triển phù hợp).

Tất nhiên điều này KHÔNG DÀNH CHO NHỮNG NGƯỜI đang sử dụng một trang web đang được sản xuất mà lỗi này cho thấy có vấn đề với bảo mật trang web.


0

Nếu bạn cảm thấy mệt mỏi với lỗi này. Bạn có thể làm cho Chrome không hoạt động như vậy. Tôi không nói đó là cách tốt nhất mà chỉ nói đó là một cách.

Để giải quyết vấn đề này, bạn có thể tạo khóa đăng ký Windows để cho phép Google Chrome sử dụng CommonName của chứng chỉ máy chủ để khớp với tên máy chủ nếu chứng chỉ thiếu phần mở rộng subjectAlternativeName, miễn là nó xác thực thành công và liên kết với CA được cài đặt cục bộ chứng chỉ.

Loại dữ liệu: Boolean [Windows: REG_DWORD] Vị trí đăng ký Windows: HKEY_LOCAL_MACHINE \ SOFTWARE \ Policies \ Google \ Chrome Windows / Mac / Linux / Tên tùy chọn Android: EnableCommonNameFallbackForLocalAnchors Giá trị: 0x00000001 (Windows), true (Linux), true (Android), (Mac) Để tạo khóa đăng ký Windows, chỉ cần làm theo các bước sau:

Mở Notepad Sao chép và dán nội dung sau vào notepad Windows Registry Editor Phiên bản 5.00

[HKEY_LOCAL_MACHINE \ SOFTWARE \ Policies \ Google \ Chrome] "EnableCommonNameFallbackForLocalAnchors" = dword: 00000001 Đi tới Tệp> Lưu dưới dạng Tên tệp: any_filename.reg Lưu thành loại: Tất cả Tệp

Chọn vị trí ưa thích cho tệp

Nhấp vào Lưu

Nhấp đúp vào tệp đã lưu để chạy

Nhấp vào Yes trên cảnh báo Registry Editor

Tìm thấy thông tin này trên trang hỗ trợ Symantec: https://support.symantec.com/en_US/article.TECH240507.html


0

Các câu trả lời được cung cấp không phù hợp với tôi (Chrome hoặc Firefox) trong khi tạo PWA để phát triển và thử nghiệm cục bộ. KHÔNG DÙNG ĐỂ SẢN XUẤT! Tôi đã có thể sử dụng những thứ sau:

  1. Trang web công cụ chứng chỉ trực tuyến với các tùy chọn sau:
    • Tên chung: Thêm cả "localhost" và IP của hệ thống của bạn, ví dụ: 192.168.1.12
    • Tên Thay thế Chủ đề: Thêm "DNS" = "localhost" và "IP" = <your ip here, e.g. 192.168.1.12>
    • Các tùy chọn thả xuống "CRS" được đặt thành "Tự ký"
    • tất cả các tùy chọn khác là mặc định
  2. Tải xuống tất cả các liên kết
  3. Nhập cert .p7b vào Windows bằng cách nhấp đúp và chọn "cài đặt" / OSX? / Linux?
  4. Đã thêm chứng chỉ vào ứng dụng nút ... bằng cách sử dụng ví dụ PWA của Google
    • thêm const https = require('https'); const fs = require('fs');vào đầu tệp server.js
    • bình luận return app.listen(PORT, () => { ... });ở cuối tệp server.js
    • thêm bên dưới https.createServer({ key: fs.readFileSync('./cert.key','utf8'), cert: fs.readFileSync('./cert.crt','utf8'), requestCert: false, rejectUnauthorized: false }, app).listen(PORT)

Tôi không gặp lỗi nào nữa trong Chrome hoặc Firefox

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.