Vị trí tốt nhất cho chứng chỉ SSL và khóa riêng trên Ubuntu


62

Trên Ubuntu, có vẻ như là nơi tốt nhất cho khóa riêng được sử dụng để ký chứng chỉ (để sử dụng bởi nginx) /etc/ssl/private/

Câu trả lời này cho biết thêm rằng chứng chỉ nên đi vào /etc/ssl/certs/nhưng đó dường như là một nơi không an toàn. Các .crttập tin cần phải được giữ an toàn hoặc chúng được coi là công khai?


19
Bạn có thể đặt .crtlên bảng quảng cáo Times Square nếu muốn.
ceejayoz

Câu trả lời:


48

Tệp .crt được gửi đến mọi thứ kết nối; nó là công khai ( chown root:rootchmod 644)

Để thêm vào vị trí khóa riêng; hãy chắc chắn rằng bạn bảo mật nó đúng cách cũng như có nó trong đó. ( chown root:ssl-certchmod 640)


Tôi tự hỏi tại sao thư mục đó không phải là g + s theo mặc định.
Collin Anderson

2
Nó không cần phải như vậy; thư mục là 0750, vì vậy không có cách nào để bất kỳ người dùng nào trong nhóm truy cập vào thư mục để đọc các tệp.
womble

2
Có vẻ như ssl-cert là tên nhóm không hợp lệ trên Ubuntu. Có lẽ nó nên được root root: thay vào đó là root
Atifm 20/03/18

1
@Atifm Nhóm chứng nhận ssl-cert được giới thiệu vào ngày 16.04 hoặc 18.04. Tôi không thể nhớ cái nào.
DylanYoung

1
@DylanYoung: chắc chắn nó có mặt trên Ubuntu 12.04 và tôi tin rằng nó được tạo bởi gói ssl-cert, có lẽ, trong số những thứ khác, tạo chứng chỉ rắn tự ký
MestreLion

35

Việc bạn đặt chúng ở đâu miễn là bạn bảo vệ đúng cách (các) tệp khóa riêng tư của mình . Các giấy chứng nhận nào là công khai; không cần bảo vệ - đặc quyền máy chủ hoặc cách khác.

Để mở rộng câu trả lời, tôi không sử dụng vị trí mặc định /etc/ssl.
Nó dễ dàng hơn cho tôi để giữ tất cả của tôi trong một khu vực riêng biệt do sao lưu + lý do khác.

Đối với Apache SSL, tôi giữ cho tôi trong /etc/apache2/ssl/privatehoặc "vùng gốc" tương tự /etc/.

Thiết lập ví dụ

Bài đăng này hướng đến Ubuntu (Debian) + Apache, nhưng sẽ hoạt động trên hầu hết các hệ thống -
Chỉ cần áp dụng các quyền và cập nhật vị trí / đường dẫn trong cấu hình đã cho (apache / nginx / etc).
Nếu các tệp khóa SSL được bảo vệ chính xác (thư mục & tệp), bạn sẽ ổn. Lưu ý các ghi chú!

Tạo thư mục:

sudo mkdir /etc/apache2/ssl
sudo mkdir /etc/apache2/ssl/private
sudo chmod 755 /etc/apache2/ssl
sudo chmod 710 /etc/apache2/ssl/private

Lưu ý:
chmod 710hỗ trợ ssl-certnhóm trong Ubuntu.
(Xem bình luận)
Đặt quyền 700vào /etc/apache2/ssl/privatecũng sẽ hoạt động tốt.

Đặt tệp SSL:

Đặt (các) chứng chỉ ssl www công khai cùng với (các) chứng chỉ trung gian trong /etc/apache2/ssl
Đặt các khóa ssl riêng tư vào/etc/apache2/ssl/private

Đặt chủ sở hữu:

sudo chown -R root:root /etc/apache2/ssl/
sudo chown -R root:ssl-cert /etc/apache2/ssl/private/

Lưu ý:
Nếu bạn không có nhóm ssl-cert , chỉ cần sử dụng 'root: root' trên dòng trên hoặc bỏ qua dòng thứ 2.

Đặt quyền:

Giấy chứng nhận công cộng

sudo chmod 644 /etc/apache2/ssl/*.crt

Khóa riêng

sudo chmod 640 /etc/apache2/ssl/private/*.key

Lưu ý:
Quyền của nhóm được đặt thành READ (640) do nhóm ssl-cert của Ubuntu. '600' cũng tốt.

Kích hoạt mô-đun SSL SSL

sudo a2enmod ssl

Chỉnh sửa bất kỳ tệp trang web Apache nào và kích hoạt

(xem đoạn cuối) *

sudo nano /etc/apache/sites-available/mysiteexample-ssl.conf
sudo a2ensite mysiteexample-ssl
#             ^^^^^^^^^^^^^^^^^ <-Substitute your ".conf" filename(s)

Khởi động lại dịch vụ Apache2

sudo service apache2 restart

hoặc là

sudo systemctl restart apache2.service

Làm xong. Kiểm tra trang web SSL mới của bạn.

* Một lần nữa, điều này vượt ra ngoài câu hỏi, nhưng bạn có thể sao chép tệp cấu hình trang web Apache SSL mặc định ( sudo cp /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/mysiteexample-ssl.conf) làm điểm khởi đầu / ví dụ tốt về các chỉ thị / thư mục mặc định thường được sử dụng trong tệp 'conf' Apache / SSL đơn giản (Ubuntu / Debian) . Nó thường trỏ đến chứng chỉ SSL tự ký + khóa (snoil), gói CA, cũng như các chỉ thị phổ biến được sử dụng cho một trang web SSL nhất định.

Sau khi sao chép, chỉ cần chỉnh sửa tệp .conf mới và thêm / xóa / cập nhật tệp nếu cần với thông tin / đường dẫn mới ở trên, sau đó thực thi sudo a2ensite mysiteexample-sslđể bật tệp.


không chắc chắn lý do tại sao bạn đề xuất cài đặt 710 cho quyền cho / etc / apache2 / ssl / private. Đặt bit thực thi cho thư mục (cho nhóm) mà không đặt bit đọc cho thư mục (cho nhóm) sẽ không có ý nghĩa nhiều đối với tôi. Ý của bạn là đặt nó là 750?
chriv 22/03/2016

@chriv Tôi chỉ đặt quyền dựa trên cách tôi thấy nó được thiết lập trong khu vực SSL mặc định của Ubuntu. Xem / etc / ssl / certs & / etc / ssl / private & ssl-certs sử dụng nhóm. Xem stackoverflow.com/a/23408897/503621
bshea

1
Một lời giải thích rất độc đáo và chi tiết cho một câu hỏi chung chung với nhiều câu trả lời có thể. Cảm ơn bạn. Chỉ cần thêm một vài điều, <VirtualHost *:443>phần của bạn trong bạn sites-available/mysite.confnên bao gồm các chứng chỉ như vậy:SSLEngine on SSLCertificateFile /etc/apache2/ssl/mysite.crt SSLCertificateKeyFile /etc/apache2/ssl/private/mysite.key
George Dimitriadis

BTW - Cũng có thể kết hợp các cấu hình: 80 và: 443 của bạn trong một tệp ".conf" của Apache. Tôi chuyển hướng mọi thứ nhấn port: 80 tại: 443 / SSL. Bạn cũng có thể đặt các cài đặt SSL cơ bản trong tệp .conf và tạo tệp cài đặt SSL 'chi tiết' bổ sung (để đặt mật mã được sử dụng / v.v.) và chỉ đưa nó vào tất cả các tệp .conf của bạn bên ngoài các vùng ảo. Tôi sử dụng các cài đặt này để 'làm cứng' SSL một chút và tôi đưa nó vào từng trang web ảo .conf. Tôi có thể nhận A + tại SSL Labs theo cách này.
bshea

10

Tất cả các câu trả lời ở đây có vẻ ổn, nhưng tôi muốn đề cập đến một điều tôi thấy là một vấn đề ... Nếu bạn phải kết hợp chứng chỉ của mình với các trung gian hoặc gốc để đưa ra một tệp chuỗi, đừng đưa nó vào /etc/ssl/certs, bởi vì khi c_rehashđược chạy, nó có thể tạo ra các liên kết băm đến certs của bạn do các gốc hoặc các chất trung gian bên trong chúng.

Sau đó, xuống đường nếu certs của bạn đã hết hạn và bạn gỡ bỏ chúng, và không biết chạy lại c_rehash, bạn có thể đã phá vỡ các liên kết băm trong /etc/ssl/certsthư mục của mình và những điều kỳ lạ bắt đầu xảy ra khi máy cục bộ của bạn cố gắng kết nối với chính nó SSL và nó không thể tìm ra gốc rễ để xác nhận. Ví dụ, với curl tôi đột nhiên bắt đầu nhận được:

curl: (60) SSL certificate problem: unable to get issuer certificate

Ngay sau khi dọn sạch một số tệp .crt cũ và các tệp .pem đã ghép nối tôi có /etc/ssl/certs.

Lưu trữ ít nhất chuỗi của bạn ở một nơi khác tránh được vấn đề này. Cuối cùng tôi đã tạo ra một /etc/ssl/local_certstổ chức để giữ certs và chuỗi của mình, vì vậy họ không bị lạc trong mớ hỗn độn của CA certs bạn sẽ tìm thấy trong/etc/ssl/certs


2

Không thực sự là một nơi không an toàn nếu quyền cho các tệp / thư mục riêng lẻ được đặt thành một cái gì đó giống như chown root :0 private.keychmod 600 private.keychỉ có root mới có thể đọc được. CSR và các tệp chứng chỉ ít nhạy cảm hơn như bạn nói.

Với các quyền đó, các đường dẫn bạn đề cập và / usr / local / ssl sẽ ổn.


1
Thông thường, các ứng dụng truy cập khóa riêng đang chạy như người dùng không root. Tôi khuyên bạn nên duy trì quyền truy cập cho nhóm ssl-cert.
Shane Madden

1
Hiểu nhưng các máy chủ web như Apache sinh ra một quy trình 'cha mẹ' gốc và giả sử nginx cũng vậy, điều này là thích hợp.
Jonathan Ross

1

Vị trí chính xác:

  • /etc/ssl/certs/cho .crttập tin
  • /etc/ssl/privatecho .keytập tin

Chủ sở hữu phải root:rootcho cả hai (sử dụng sudo chmod root:root <file>để thay đổi nếu cần).

Quyền :

  • 644cho .crttập tin
  • 600cho .keytập tin

Điều này sẽ làm việc cho nginx.

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.