Để tạo được chứng chỉ SSL chúng ta cần có CSR và Private Key, trong bài viết này Thắng sẽ hướng dẫn mọi người cách tạo mã CSR và Private Key đơn giản nhất bằng code PHP.
Chúng ta cùng làm rõ khái niệm về CSR và Private Key một chút nhé:
CSR (Certificate Signing Request) là một yêu cầu để nhận chứng chỉ số (digital certificate) từ một tổ chức chứng thực (Certificate Authority – CA) trong hệ thống công khai – khóa bí mật (Public Key Infrastructure – PKI). CSR chứa thông tin như tên miền, tên tổ chức và khóa công khai (public key) của người yêu cầu chứng chỉ số.
Private key là một khóa trong cặp khóa công khai (Public Key) – khóa bí mật (Private Key) được sử dụng trong hệ thống mã hóa đối xứng và bất đối xứng. Khóa bí mật chỉ được biết bởi người sở hữu và không được tiết lộ cho người khác. Nó được sử dụng để giải mã các tin nhắn đã được mã hóa bằng khóa công khai tương ứng. Ngoài ra, khóa bí mật còn được sử dụng để tạo chữ ký số (digital signature) để xác thực tính toàn vẹn và nguồn gốc của dữ liệu.
Và bây giờ cùng bắt tay vào code thôi nào:
Trước tiên mọi người khai báo dữ liệu, bạn có thể dùng dữ liệu tĩnh trực tiếp trong code PHP hoặc lấy giá trị từ Form, dưới đây là dữ liệu mẫu:
1 2 3 4 5 6 7 8 9 10 11 |
<?php $data = array( "commonName" => "ngothang.me", "organizationName" => "Ngo Thang", "organizationalUnitName" => "IT", "localityName" => "Hà Nội", "stateOrProvinceName" => "Tây Hồ", "countryName" => "VN", // Vietnam mã rút gọn là VN ); ?> |
Tiếp theo, tạo mới một mã Private Key
1 2 3 4 |
<?php // Generate a new private (and public) key pair $private_key = openssl_pkey_new( array('private_key_type'=>OPENSSL_KEYTYPE_RSA,'private_key_bits'=>2048) ); ?> |
Sau đó, tạo mới một mã CSR (certificate signing request)
1 2 3 4 |
<?php // Generate a certificate signing request $csr = openssl_csr_new($data, $private_key, array('digest_alg'=>'sha256') ); ?> |
Cuối cùng là xuất ra mã CSR và Private Key mà chúng ta đang cần
1 2 3 4 5 6 7 8 |
<?php $mypassword = "mypassword";// có thể bỏ trống openssl_csr_export($csr, $csr_output); openssl_pkey_export($private_key, $private_key_output, $mypassword); echo $csr_output."\n"; echo $private_key_output."\n"; ?> |
Cùng xem kết quả hiển thị nhé
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
-----BEGIN CERTIFICATE REQUEST----- MIIC1jCCAb4CAQAwgZAxFDASBgNVBAMMC25nb3RoYW5nLm1lMRIwEAYDVQQKDAlO Z28gVGhhbmcxCzAJBgNVBAsMAklUMRIwEAYDVQQHDAlIw6AgTuG7mWkxEjAQBgNV BAgMCVTDonkgSOG7kzELMAkGA1UEBhMCVk4xIjAgBgkqhkiG9w0BCQEWE2NvbnRh Y3RAbmdvdGhhbmcubWUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDe EJEX/MyUis407FmqF3YNAyZR8nuu92kOCYe7j8fpIQdZBPWxCBGvF6PY6ju4OR/3 o0C0BD04DWP6RNwUW2XXyCcaSsrsu9PhvLnGf/qGmOMrbDpa6tEW6laxXmskfS2l 6FVf9cVqIfm2F9CSP+esWKSpFhA1IiJ6spnfj28rwXX6f2Ejshx9CKaKLwEupBOr H7og9+c2sDkS/j0D/u/zdygnVHmMCjwGhJzBycTaTACC43yA8KrJseRf4rMRBPNW PvQLBvFnKhm5ODoS1vnjoO4B51QPSU9P5/jYavxmFtQozjGBcg1qxZICMuF1gSrT NQwW8IYg3MjUkntsTNljAgMBAAGgADANBgkqhkiG9w0BAQsFAAOCAQEAKQIKIHNv twEymYbl3eIXhIfudf3eE9sJNyes8fma7WYoZc0Vpa/cQ7CjYnjMovg1lUmPhEY7 VuQwd3qoPfNOYgZmGfPfiVBybe90cpDIzWT9Q8X+pJ6aPjEQMK6u6XlsPDe1amBe xwAJ4acrgWxdYQNYLyA2ah8ZhDLvLIYfS59ovkxVe+KB3qbQRODPjpEmxl26k+sc Athsptx5VNqhWP9xp2QYr5D6XXUK5aeLoiCVEaKbn+56JESRPcnEPHLkf4NSrJNH njeGZJKUBcCHEDtNd3dsiCPQsvOhfklJQ3T6SnWWJwcJTsr6NV4zRKFa5s0UPDC5 ApfP2MSwnMJYBw== -----END CERTIFICATE REQUEST----- -----BEGIN ENCRYPTED PRIVATE KEY----- MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIxprikNLk2SICAggA MBQGCCqGSIb3DQMHBAghOjv3YDRX0QSCBMi54dbkmJj9XcuMwCO0GsL7FeHV80L/ WsV9dawbh75caNlW8XtBLkXGWE/PF6MpKHgKa3eZBrH2midoB5fEIwTBXUcgGEjK jInaAijm9XmuhP/Y50Yt7wkXJMeaeMr2e5vxvDbrJKSowZQIRAS5but/wfPpuJmb PtPtTT25LICIArF1kIKXvwv7ov2lYztsvRautAeDR0q1taep3kEnxouj6MOid1FS ZNI/3CJnfDl/8W37qZFqjTrbF95EPhwFeVGc6P/Ck08GNm3IyHe3J55o6X432yst ii3Oynst1LmtCIjvz78dnMa4uoaCa8BVk+nY1j4LmEfLfZ5WVevrcYyJU7QaRuEX qFx2szf80J1cNMahzZZngCe5RaCJfxbFaak3H6uGJg9lCq9GzCoyQPnS0q8A3Jmp IMLYY/Keom0Y21sEDEW0nngGnE2srW32qiVHRJ1vntYDAiqsh5ogUF01+EAUxKF7 2pt+gYbInMMAqGDKsZUyvPWf3Y9hKr6/lX7maFY4b1D7uS4byQpYzEXdnC+b6ZTy 0Qq1XB2LAQNu/qrHy/A07FR/TctBJsc7FL4urUEu8+cexODBrYzowcj/BhZEZcTY zeU2ddtg6eEaq44aKDaGLXyPjHtm7CfK0uxdH/c3bZjxr4YBvRMp7J3ofU1J+SDT A6L564uKspE7CJZ0xORl6gqgq5AENxSJ7yqK2C6R9ade5Fnkeo4i23gZQUGqgPxO kBbybWHa7qjgqIOKj+8aCh6VzmnlsgPNTywJ104eMeEZn3VLITPRWq8hhJ3M2TA7 1ZjMPRSe3RQZS9WUPLIfoGBKG3LJwM0mhYhoFCOo7fiu5KqSpEfvy9sSqy2zMeAl lTUiTdwU8CB7C6YfJYtm33PMisX1zXhg3MlQo+bQDMX2IUhjzwntdfH0KpQDXJgv CMRg0PSr9xnZGHMvgSo052pFr/uUY66H/SZNXtENTZtTg4uyGMSmJhZXh03pDXK2 kmLv2Inc3QN6VzGRD3+dSkMBch0SitsYLD90RPcLCqA8EmH/cPGk+6feyS/fQMAy PPy1DcZSQfFH6rYUyCMeeI+uLkNnd76d0mrF2GWbXBVTW431MjxCjc2vpTMRwUs7 TcGaYvUCCysA2EASarwq9mj/CkdFhYYw8ukTEaYsxZj+1Q7Yb5ZxHkg3bT2yBtLA AJqiOHFWTF0CB4y0tOBbixr6SQtZM/cBTrpc0DCRJdi/IBebE6cogMCSG9vtu6VA G5KqdNrBFtySLuwBSWtzZ0uZu0yQettWTVD9UmrRNHItjF2FEHFds5IUqYEIT0Sm f/KvTc8C2Jedh3x5W5b5PyIdxz7SiatKHMYM+9Fxw11kz0lHiscmhAn6hWEXrN3V jVKBOOOXucQqXux/qidEnJiDvCBjSzPXOD/zF8sZwsC2d5Gzesd5Djc7qRrnaWb6 8fAn8TwAOCRsFObQB5ZdaufWyQAmtWr0I0v9PlTqQ5hbGs8dt8FU48oT0eC0MIro Do8Zt2Y9vg1Qr+3tkNWgcftTNg0RPJ+FYzGcDtwkamkDk3BfrIlUtc9lL2oIndQ1 F83pdhFsLnObgDPdJsKqSI4m4J5w5IcwAwywy9KncFlwAeCbYrI91jNnykiZ8fCL aBg= -----END ENCRYPTED PRIVATE KEY----- |
Mọi người lưu mã CSR vào file .csr và Private Key vào file .key để sử dụng nhé.
Thật đơn giản phải không, Thắng tổng hợp lại bộ code thành 1 file như sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
<?php $data = array( "commonName" => "ngothang.me", "organizationName" => "Ngo Thang", "organizationalUnitName" => "IT", "localityName" => "Hà Nội", "stateOrProvinceName" => "Tây Hồ", "countryName" => "VN", // Vietnam mã rút gọn là VN ); // Generate a new private (and public) key pair $private_key = openssl_pkey_new( array('private_key_type'=>OPENSSL_KEYTYPE_RSA,'private_key_bits'=>2048) ); // Generate a certificate signing request $csr = openssl_csr_new($data, $private_key, array('digest_alg'=>'sha256') ); $mypassword = "mypassword";// có thể bỏ trống openssl_csr_export($csr, $csr_output); openssl_pkey_export($private_key, $private_key_output, $mypassword); echo $csr_output."\n"; echo $private_key_output."\n"; ?> |
Cám ơn bạn đã đọc bài viết của mình.