Làm thế nào để tạo chứng chỉ tự ký cho localhost?


23

Tôi đã làm với một mật khẩu và với các trường sau đây là root

openssl req -x509 -days 365 -newkey rsa:2048 -keyout /etc/ssl/apache.key \
    -out /etc/ssl/apache.crt

Lĩnh vực

Country: FI
State: Pirkanmaa
Locality: Tampere
Organization: masi
Organizational Unit Name: SSL Certificate Test
CommonName: 192.168.1.107/owncloud
EmailAddress: masi@gmail.com

Đầu ra: Lỗi bắt tay SSL trong HTTPS. Đầu ra dự kiến: Kết nối HTTPS. HTTP hoạt động.

CommonName nên bao gồm URL nơi bạn muốn đến, chủ đề của owncloud tại đây . Tôi đã thử không thành công trong tên chung

  • 192.168.1.107/owncloud
  • 192.168.1.107/

Kiểm tra hệ điều hành cho máy chủ: Debian 8.5.
Máy chủ: Raspberry Pi 3b. Máy chủ riêng: 8.2.5. Riêng khách hàng: 2.1.1. Hệ thống-máy khách: Debian 8.5.


Nếu bạn đang tìm cách tạo chứng chỉ SSL mới bằng SAN cho localhost, hãy thực hiện các bước trên bài đăng này đã có hiệu quả với tôi Centos 7 / Vagrant / Chrome Browser.
Damodar Bashyal

@DamodarBashyal Xin vui lòng, không cung cấp liên kết chỉ trả lời mà một số mô tả quá như là một câu trả lời.
Léo Léopold Hertz

Câu trả lời:


11

openssl req -x509 -ngày 365 -newkey rsa: 2048 -keyout /etc/ssl/apache.key -out /etc/ssl/apache.crt

Bạn không thể sử dụng lệnh này để tạo chứng chỉ X.509 được hình thành tốt. Nó sẽ không đúng định dạng vì tên máy chủ được đặt trong Tên chung (CN) . Việc đặt tên máy chủ hoặc Địa chỉ IP trong CN không được chấp nhận bởi cả IETF (hầu hết các công cụ, như wgetcurl) và Diễn đàn CA / B (CA và Trình duyệt).

Theo cả Diễn đàn IETF và CA / B, Tên máy chủ và Địa chỉ IP luôn đi trong Tên thay thế chủ đề (SAN) . Để biết các quy tắc, hãy xem RFC 5280, Internet X.509 Chứng chỉ cơ sở hạ tầng khóa công khai và danh sách thu hồi chứng chỉ (CRL) và các yêu cầu cơ bản của diễn đàn CA / Trình duyệt .

Bạn chủ yếu cần sử dụng tệp cấu hình OpenSSL và điều chỉnh nó cho phù hợp với nhu cầu của bạn. Dưới đây là một ví dụ về một cái tôi sử dụng. Nó được gọi example-com.confvà được chuyển đến lệnh OpenSSL thông qua -config example-com.conf.


Cũng thế lưu ý tốt : tất cả các máy tự xưng là localhost, localhost.localdomainvv Hãy cẩn thận về cấp giấy chứng nhận cho localhost. Tôi không nói đừng làm điều đó; chỉ cần hiểu có một số rủi ro liên quan.

Các lựa chọn thay thế localhostlà: (1) chạy DNS và cấp chứng chỉ cho tên DNS của máy. Hoặc, (2) sử dụng IP tĩnh và bao gồm địa chỉ IP tĩnh.


Các trình duyệt vẫn sẽ cung cấp cho bạn các cảnh báo về chứng chỉ tự ký không nối lại với một gốc đáng tin cậy. Các công cụ thích curlwgetsẽ không phàn nàn, nhưng bạn vẫn cần tin tưởng vào bản thân mình đã ký với một tùy chọn như cURL --cafile. Để khắc phục vấn đề tin cậy Trình duyệt, bạn phải trở thành CA của chính mình.

"Trở thành CA của riêng bạn" được gọi là chạy PKI riêng. Không có gì nhiều cho nó. Bạn có thể làm mọi thứ mà CA công cộng có thể làm. Điều duy nhất khác nhau là bạn sẽ cần phải cài đặt của bạn Certificate Root CA trong các cửa hàng khác nhau. Nó không khác gì, nói, sử dụng cURL cacerts.pm. cacerts.pmchỉ là một bộ sưu tập của Root CA, và bây giờ bạn đã tham gia câu lạc bộ.

Nếu bạn trở thành CA của riêng bạn, thì hãy chắc chắn ghi khóa riêng của Root CA vào đĩa và giữ nó ngoại tuyến. Sau đó bật nó vào ổ đĩa CD / DVD khi bạn cần ký yêu cầu ký. Bây giờ bạn đang cấp chứng chỉ giống như CA công cộng.

Không có gì trong số này là cực kỳ khó khăn khi bạn ký một hoặc hai yêu cầu ký. Tôi đã điều hành PKI tư nhân trong nhiều năm tại nhà. Tất cả các thiết bị và tiện ích của tôi tin tưởng CA.

Để biết thêm thông tin về việc trở thành CA của riêng bạn, hãy xem Cách bạn ký Yêu cầu ký chứng chỉ với Cơ quan chứng nhận của bạn Cách tạo chứng chỉ tự ký với openssl? .


Từ các ý kiến ​​trong tập tin cấu hình bên dưới ...

Tự ký (lưu ý thêm -x509)

openssl req -config example-com.conf -new -x509 -sha256 -newkey rsa:2048 -nodes -keyout example-com.key.pem -days 365 -out example-com.cert.pem

Yêu cầu ký tên (lưu ý thiếu -x509)

openssl req -config example-com.conf -new -newkey rsa:2048 -nodes -keyout example-com.key.pem -days 365 -out example-com.req.pem

In một bản tự ký

openssl x509 -in example-com.cert.pem -text -noout

In một yêu cầu ký

openssl req -in example-com.req.pem -text -noout

Tập tin cấu hình

# Self Signed (note the addition of -x509):
#     openssl req -config example-com.conf -new -x509 -sha256 -newkey rsa:2048 -nodes -keyout example-com.key.pem -days 365 -out example-com.cert.pem
# Signing Request (note the lack of -x509):
#     openssl req -config example-com.conf -new -newkey rsa:2048 -nodes -keyout example-com.key.pem -days 365 -out example-com.req.pem
# Print it:
#     openssl x509 -in example-com.cert.pem -text -noout
#     openssl req -in example-com.req.pem -text -noout

[ req ]
default_bits        = 2048
default_keyfile     = server-key.pem
distinguished_name  = subject
req_extensions      = req_ext
x509_extensions     = x509_ext
string_mask         = utf8only

# The Subject DN can be formed using X501 or RFC 4514 (see RFC 4519 for a description).
#   It's sort of a mashup. For example, RFC 4514 does not provide emailAddress.
[ subject ]
countryName         = Country Name (2 letter code)
countryName_default     = US

stateOrProvinceName     = State or Province Name (full name)
stateOrProvinceName_default = NY

localityName            = Locality Name (eg, city)
localityName_default        = New York

organizationName         = Organization Name (eg, company)
organizationName_default    = Example, LLC

# Use a friendly name here because it's presented to the user. The server's DNS
#   names are placed in Subject Alternate Names. Plus, DNS names here is deprecated
#   by both IETF and CA/Browser Forums. If you place a DNS name here, then you 
#   must include the DNS name in the SAN too (otherwise, Chrome and others that
#   strictly follow the CA/Browser Baseline Requirements will fail).
commonName          = Common Name (e.g. server FQDN or YOUR name)
commonName_default      = Example Company

emailAddress            = Email Address
emailAddress_default        = test@example.com

# Section x509_ext is used when generating a self-signed certificate. I.e., openssl req -x509 ...
[ x509_ext ]

subjectKeyIdentifier        = hash
authorityKeyIdentifier  = keyid,issuer

#  If RSA Key Transport bothers you, then remove keyEncipherment. TLS 1.3 is removing RSA
#  Key Transport in favor of exchanges with Forward Secrecy, like DHE and ECDHE.
basicConstraints        = CA:FALSE
keyUsage            = digitalSignature, keyEncipherment
subjectAltName          = @alternate_names
nsComment           = "OpenSSL Generated Certificate"

# RFC 5280, Section 4.2.1.12 makes EKU optional
# CA/Browser Baseline Requirements, Appendix (B)(3)(G) makes me confused
# extendedKeyUsage  = serverAuth, clientAuth

# Section req_ext is used when generating a certificate signing request. I.e., openssl req ...
[ req_ext ]

subjectKeyIdentifier        = hash

basicConstraints        = CA:FALSE
keyUsage            = digitalSignature, keyEncipherment
subjectAltName          = @alternate_names
nsComment           = "OpenSSL Generated Certificate"

# RFC 5280, Section 4.2.1.12 makes EKU optional
# CA/Browser Baseline Requirements, Appendix (B)(3)(G) makes me confused
# extendedKeyUsage  = serverAuth, clientAuth

[ alternate_names ]

DNS.1       = example.com
DNS.2       = www.example.com
DNS.3       = mail.example.com
DNS.4       = ftp.example.com

# Add these if you need them. But usually you don't want them or
#   need them in production. You may need them for development.
# DNS.5       = localhost
# DNS.6       = localhost.localdomain
# DNS.7       = 127.0.0.1

# IPv6 localhost
# DNS.8     = ::1
# DNS.9     = fe80::1

Bạn có thể cần thực hiện các thao tác sau cho Chrome. Nếu không, Chrome có thể khiếu nại Tên chung không hợp lệ ( ERR_CERT_COMMON_NAME_INVALID) . Tôi không chắc mối quan hệ giữa địa chỉ IP trong SAN và CN trong trường hợp này là gì.

# IPv4 localhost
# IP.1       = 127.0.0.1

# IPv6 localhost
# IP.2     = ::1

Bạn có thể vui lòng thêm đường dẫn mặc định vào tập tin cấu hình không? - - Bạn có thể vui lòng hiển thị dòng công việc hoàn thành? Về việc chuyển tập tin sang lệnh openssl, v.v. - - Tôi đã không quản lý để thành công với câu trả lời trước đó nên tất cả các thông tin cần thiết đều được đánh giá cao.
Léo Léopold Hertz

@Masi - "Bạn có thể vui lòng thêm đường dẫn mặc định vào tệp cấu hình không?" - Không chắc chắn những gì bạn có ý nghĩa. Bạn có thể lưu nó bất cứ nơi nào bạn muốn. Tôi chạy nó từ máy tính để bàn trên nhiều máy và thư mục nhà của tôi trên các máy khác. Tôi nhận thấy bạn sử dụng sudo. Có thể .rndtập tin của bạn được sở hữu bởi root. Nếu vậy, hãy thử a sudo chown -R masi:masi /home/masi. Sau đó, bạn sẽ có thể đọc từ nó và viết cho nó.

Tôi hiện chỉ sử dụng Debian, không phải Ubuntu, vì vậy chỉ root. Vui lòng, thêm luồng công việc của bạn làm ví dụ về tệp keepinv trong Máy tính để bàn và chuyển tiếp. Tôi không có một hình ảnh rõ ràng về hệ thống.
Léo Léopold Hertz

1
Chạy một trong các lệnh được liệt kê ở phần đầu của tệp. Các ý kiến ​​là có để sao chép / dán. Chọn một trong đó phù hợp với khẩu vị của bạn. Nếu bạn vẫn đang cố gắng tự tạo một chữ ký, thì bạn chạy lệnh với x509nó (giống như nhận xét nói).

Tác giả đã yêu cầu xóa bài đăng này "do thay đổi CA / B", nhưng do số lượng phiếu bầu và trợ giúp tiềm năng mà nó cung cấp trong nhiều năm qua, tôi đã khôi phục nó. Hãy đưa ra lời khuyên trong bài viết khi được đưa ra.
Jeff Schaller

1

Các CommonNamenên tương ứng với bất cứ điều gì được gửi như Host: tiêu đề trong yêu cầu HTTP. Trong trường hợp của bạn, đó sẽ là 192.168.1.107 (không có dấu gạch chéo).

Định cấu hình tên máy chủ cho máy chủ web

Cá nhân, tôi muốn cấu hình một tên máy chủ thân thiện cho máy chủ web. Trong thư của bạn Cấu hình Apache hoặc cấu hình máy chủ ảo (có thể /etc/apache2/sites-enabled/000-default.confdành cho các bản phân phối dựa trên Debian), hãy sử dụng ServerNamehoặc ServerAliaschỉ thị, ví dụ:

ServerName owncloud.masi

Khởi động lại Apache và sau đó và định cấu hình DNS hoặc (đơn giản hơn) thêm một mục nhập trong mỗi máy khách /etc/hostsđể trỏ nó đến địa chỉ IP chính xác, ví dụ:

192.168.1.107   owncloud.masi

Truy cập owncloud của tôi là tại 192.168.1.107. Các chủ đề khác nói rằng bạn nên bao gồm tên miền phụ. Tôi nghĩ nó ngụ ý 192.168.1.107/owncloud. Tuy nhiên, tôi có thể sai.
Léo Léopold Hertz

Giả sử bạn sử dụng ServerName owncloud.masitrong .../sites-enabled/000-default.conf. Là tên chung của khóa SSL sau đó owncloud.masi ?
Léo Léopold Hertz

Địa chỉ IP sẽ ngừng hoạt động? Tương tự nếu bạn sử dụng ServerAlias?
Léo Léopold Hertz

1
Truy cập qua địa chỉ IP sẽ tiếp tục hoạt động cho HTTP. BTW, chúng tôi đã đạt đến giới hạn nhận xét (vì vậy tôi đã xóa các câu trả lời trước đây cho câu hỏi của bạn) và tôi sẽ sớm phải ngoại tuyến.
Anthony G - công lý cho Monica

1
"Tên chung phải tương ứng với bất cứ thứ gì được gửi dưới dạng tiêu đề Host: trong yêu cầu HTTP" - Sai. Đặt tên máy chủ là Tên chung không được chấp nhận bởi cả Diễn đàn IETF và CA / B. Tên máy chủ và Địa chỉ IP luôn đi trong Tên thay thế chủ đề theo Diễn đàn IETF và CA / B. Ngoài ra, hãy xem Làm thế nào để bạn ký Yêu cầu ký chứng chỉ với Cơ quan chứng nhận của bạnCách tạo chứng chỉ tự ký với openssl?
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.