Ubuntu 12.04 đi kèm với OpenSSL 1.0.1, có một số mặc định khác so với phiên bản OpenSSL 0.9.8 cũ.
Trong số những thứ khác, nếu bạn đang sử dụng openssl req -newkey rsa:2048
để tạo khóa RSA, bạn sẽ kết thúc bằng một khóa có định dạng gọi là PKCS # 8 . Được biểu thị ở định dạng PEM, các khóa này có -----BEGIN PRIVATE KEY-----
tiêu đề chung hơn , không cho bạn biết đó là loại khóa nào (RSA, DSA, EC).
Trước đây, với OpenSSL 0.9.8, các khóa luôn ở định dạng có tên PKCS # 1 , được biểu thị là PEM, có tiêu đề -----BEGIN RSA PRIVATE KEY-----
.
Do đó, bạn không thể thay đổi tiêu đề và chân trang từ:
-----BEGIN PRIVATE KEY-----
đến
-----BEGIN RSA PRIVATE KEY-----`
Đó không phải là điều tương tự và nó sẽ không hoạt động. Thay vào đó, bạn cần chuyển đổi khóa sang định dạng cũ bằng cách sử dụng openssl rsa
. Như thế này:
openssl rsa -in key_in_pkcs1_or_pkcs8.pem -out key_in_pkcs1.pem
MySQL (v5.5.35) trên Ubuntu 12.04 đang sử dụng triển khai SSL có tên là yaSSL (v2.2.2). Nó hy vọng các khóa có định dạng PKCS # 1 và không hỗ trợ định dạng PKCS # 8 được sử dụng bởi OpenSSL 1.0 và mới hơn. Nếu bạn chỉ đơn giản thay đổi đầu trang và chân trang, như được đề xuất bởi các bài đăng khác trong chuỗi này, MySQL / yaSSL sẽ không phàn nàn, nhưng bạn sẽ không thể kết nối và thay vào đó là một lỗi như thế này:
ERROR 2026 (HY000): SSL connection error: protocol version mismatch
Ubuntu 14.04 đi kèm với OpenSSL 1.0.1f và các cài đặt mới. Trong số những thứ khác, nó sẽ tạo ra các chứng chỉ với các bản tóm tắt SHA256 thay vì SHA1, được sử dụng trong các phiên bản trước. Ngẫu nhiên, phiên bản yaSSL đi kèm với MySQL cũng không hỗ trợ điều này.
Nếu bạn đang tạo chứng chỉ để sử dụng với MySQL, hãy nhớ đảm bảo rằng các khóa RSA được chuyển đổi sang định dạng PEM PKCS # 1 truyền thống và các chứng chỉ đó đang sử dụng các bản tóm tắt SHA1.
Dưới đây là ví dụ về cách tạo CA của riêng bạn, chứng chỉ máy chủ và chứng chỉ ứng dụng khách.
# Generate a CA key and certificate with SHA1 digest
openssl genrsa 2048 > ca-key.pem
openssl req -sha1 -new -x509 -nodes -days 3650 -key ca-key.pem > ca-cert.pem
# Create server key and certficate with SHA1 digest, sign it and convert
# the RSA key from PKCS #8 (OpenSSL 1.0 and newer) to the old PKCS #1 format
openssl req -sha1 -newkey rsa:2048 -days 730 -nodes -keyout server-key.pem > server-req.pem
openssl x509 -sha1 -req -in server-req.pem -days 730 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > server-cert.pem
openssl rsa -in server-key.pem -out server-key.pem
# Create client key and certificate with SHA digest, sign it and convert
# the RSA key from PKCS #8 (OpenSSL 1.0 and newer) to the old PKCS #1 format
openssl req -sha1 -newkey rsa:2048 -days 730 -nodes -keyout client-key.pem > client-req.pem
openssl x509 -sha1 -req -in client-req.pem -days 730 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > client-cert.pem
openssl rsa -in client-key.pem -out client-key.pem