{"id":24,"date":"2008-07-08T15:16:34","date_gmt":"2008-07-08T15:16:34","guid":{"rendered":""},"modified":"2012-06-08T12:42:26","modified_gmt":"2012-06-08T04:42:26","slug":"ssl-cert-apache-https","status":"publish","type":"post","link":"https:\/\/matnet.my\/blog\/2008\/07\/ssl-cert-apache-https\/","title":{"rendered":"SSL + Cert + Apache = https ??"},"content":{"rendered":"<p>sebelum nih aku tak pernah lagi la setup manually benda nih, slalu dok pakai klik2 ja dlm WHM\/CPANEL utk create SSL site.<\/p>\n<p>atas tugasan yg diterima so aku dimintak utk up kan apache + openssl + cert  yang mana cert yang akan aku buat nih adalah cert sndiri bikin yg tidak diiktiraf oleh mana2 badan bertanggungjawab tak kiralah ianya NGO mahupun Gomen.<\/p>\n<p>ok saya anggap anda telah tersedia dengan apache yang telah dicompile bersama2 openssl.<\/p>\n<p>1. kita buat sijil palsu dulu.. langkah2 dia<\/p>\n<p>buat directory nama sslcert .. tak kisah sebenaqnya boh pi la nama apa yg anda suka.<\/p>\n<p>[i]mkdir sslcert[\/i]<\/p>\n<p>chmod kat dia dengan <\/p>\n<p>[i]chmod 0700 sslcert[\/i]<\/p>\n<p>lepaih tu buat subfolder dlm dia mcm nih<\/p>\n<p>[i]mkdir certs private[\/i]<\/p>\n<p>2. kemudian kita buat database file utk nanti2 leh keep track sijil2 yang kita buat<\/p>\n<p>[i]echo &#8216;100001&#8217; >serial<br \/>\ntouch certindex.txt[\/i]<\/p>\n<p>3. lepaih tu bukak sebarang editor contoh vim ka nano ka.. buat file nama openssl.cnf dan copy paste benda ni<\/p>\n<p>[quote]<br \/>\n#<br \/>\n# OpenSSL configuration file.<br \/>\n#<\/p>\n<p># Establish working directory.<\/p>\n<p>dir\t\t\t\t= .<\/p>\n<p>[ ca ]<br \/>\ndefault_ca\t\t\t= CA_default<\/p>\n<p>[ CA_default ]<br \/>\nserial\t\t\t\t= $dir\/serial<br \/>\ndatabase\t\t\t\t= $dir\/certindex.txt<br \/>\nnew_certs_dir\t\t\t= $dir\/certs<br \/>\ncertificate\t\t\t\t= $dir\/cacert.pem<br \/>\nprivate_key\t\t\t= $dir\/private\/cakey.pem<br \/>\ndefault_days\t\t\t= 365<br \/>\ndefault_md\t\t\t= md5<br \/>\npreserve\t\t\t\t= no<br \/>\nemail_in_dn\t\t\t= no<br \/>\nnameopt\t\t\t\t= default_ca<br \/>\ncertopt\t\t\t\t= default_ca<br \/>\npolicy\t\t\t\t= policy_match<\/p>\n<p>[ policy_match ]<br \/>\ncountryName\t\t\t= match<br \/>\nstateOrProvinceName\t\t= match<br \/>\norganizationName\t\t\t= match<br \/>\norganizationalUnitName\t\t= optional<br \/>\ncommonName\t\t\t= supplied<br \/>\nemailAddress\t\t\t= optional<\/p>\n<p>[ req ]<br \/>\ndefault_bits\t\t\t= 1024\t\t\t# Size of keys<br \/>\ndefault_keyfile\t\t\t= key.pem\t\t# name of generated keys<br \/>\ndefault_md\t\t\t= md5\t\t\t# message digest algorithm<br \/>\nstring_mask\t\t\t= nombstr\t\t# permitted characters<br \/>\ndistinguished_name\t\t\t= req_distinguished_name<br \/>\nreq_extensions\t\t\t= v3_req<\/p>\n<p>[ req_distinguished_name ]<br \/>\n# Variable name\t\t\t\tPrompt string<br \/>\n#&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-\t  &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br \/>\n0.organizationName\t\t\t= Organization Name (company)<br \/>\norganizationalUnitName\t\t= Organizational Unit Name (department, division)<br \/>\nemailAddress\t\t\t= Email Address<br \/>\nemailAddress_max\t\t\t= 40<br \/>\nlocalityName\t\t\t= Locality Name (city, district)<br \/>\nstateOrProvinceName\t\t= State or Province Name (full name)<br \/>\ncountryName\t\t\t= Country Name (2 letter code)<br \/>\ncountryName_min\t\t\t= 2<br \/>\ncountryName_max\t\t\t= 2<br \/>\ncommonName\t\t\t= Common Name (hostname, IP, or your name)<br \/>\ncommonName_max\t\t\t= 64<\/p>\n<p># Default values for the above, for consistency and less typing.<br \/>\n# Variable name\t\t\tValue<br \/>\n#&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;\t  &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br \/>\n0.organizationName_default\t\t= My Company<br \/>\nlocalityName_default\t\t= My Town<br \/>\nstateOrProvinceName_default\t\t= State or Providence<br \/>\ncountryName_default\t\t= US<\/p>\n<p>[ v3_ca ]<br \/>\nbasicConstraints\t\t\t= CA:TRUE<br \/>\nsubjectKeyIdentifier\t\t\t= hash<br \/>\nauthorityKeyIdentifier\t\t= keyid:always,issuer:always<\/p>\n<p>[ v3_req ]<br \/>\nbasicConstraints\t\t\t= CA:FALSE<br \/>\nsubjectKeyIdentifier\t\t\t= hash<br \/>\n[\/quote]<\/p>\n<p>3. lepas tu kita buat root cert dengan arahan dibawah<\/p>\n<p>[i]openssl req -new -x509 -extensions v3_ca -keyout \\<br \/>\nprivate\/cakey.pem -out cacert.pem -days 365 -config .\/openssl.cnf[\/i]<\/p>\n<p>[b]nota: fungsi \\ selepas keyout tuh sebenaqnya utk pendekkan command yg terlalu panjang..so just copy selebihnya dan enter[\/b]<\/p>\n<p>selepas ja taip tu nanti dia akan mintak passwd so silalah simpan passwd itu baik2<br \/>\nlepaih tu dia akan tanya pasal nama company, nama server , email dan etc. kalu nak mohong tulih pun harap dpt ingat apa yg anda tulih sebab lepaih nih ada skali lagik proses mcm nih yang akan tanya soklan yang sama so jawapan pun mesti kena sama.. tidak nnanti sijil anda tak sah.<\/p>\n<p>4. Ok lepaih tu kita install cert nih dalam apache plak<\/p>\n<p>5. ok kita buat kunci dan signing punya request pulak<\/p>\n<p>[i]openssl req -new -nodes -out name-req.pem -keyout private\/name-key.pem -config .\/openssl.cnf[\/i]<\/p>\n<p>lepaih taip ja command nih dia akan tanya soklan2 pasai nama kompeni dan sebagainya macam yg mola2 td.. so pastikan jawapan sama cam yg mola2 td. Dan dia akan create dua file nih<\/p>\n<p>name-req.pem &#8211; fail request<br \/>\nname-key.pem &#8211; fail kunci dia dok dlm private<\/p>\n<p>6. lepaih tu kita sign the request dengan command ni<\/p>\n<p>[i]openssl ca -out name-cert.pem -config .\/openssl.cnf -infiles name-req.pem[\/i]<\/p>\n<p>so akan ter create lah fail2 berikut<\/p>\n<p>name-cert.pem &#8211; inilah fail sijil tersebut<br \/>\n<nomot>.pem &#8211; ini adalah copy cert nomot<\/p>\n<p>7. kemudia kita copy file2 kunci dan sijil td ke tampat yg sepatutnya<\/p>\n<p>[i]cp name-key.pem \/etc\/httpd\/conf\/ssl.key\/<\/p>\n<p>cp name-cert.pem \/etc\/httpd\/conf\/ssl.crt\/[\/i]<\/p>\n<p>kalu folder ssl.key ngan ssl.crt tuh tak wujud so gunalah command sense anda.<\/p>\n<p>8. lepaih tu langkah yg terakhir cari fail httpd.conf anda dan taruk lah spt coding dibawah dan diubah mengikut citara masing2.<\/p>\n<p>[quote]<br \/>\n<VirtualHost 192.168.1.1:443><br \/>\n     DocumentRoot \/var\/www\/html<br \/>\n     ServerName 192.168.1.98<br \/>\n     ServerAdmin someone@your.domain<br \/>\n     ErrorLog \/etc\/httpd\/logs\/ssl_error_log<br \/>\n     TransferLog \/etc\/httpd\/logs\/ssl_access_log<br \/>\n     SSLEngine On<br \/>\n     SSLCertificateFile \/etc\/httpd\/conf\/ssl.crt\/name-cert.pem<br \/>\n     SSLCertificateKeyFile \/etc\/httpd\/conf\/ssl.key\/name-key.pem<br \/>\n    <Files ~ \"\\.(cgi|shtml|php)$\"><br \/>\n      SSLOptions +StdEnvVars<br \/>\n    <\/Files><br \/>\n    <Directory \"\/var\/www\/cgi-bin\"><br \/>\n      SSLOptions +StdEnvVars<br \/>\n    <\/Directory><br \/>\n    SetEnvIf User-Agent &#8220;.*MSIE.*&#8221; nokeepalive ssl-unclean-shutdown<br \/>\n    CustomLog \/etc\/httpd\/logs\/ssl_request_log \\<br \/>\n      &#8220;%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \\&#8221;%r\\&#8221; %b&#8221;<br \/>\n<\/VirtualHost><br \/>\n[\/quote]<\/p>\n<p>Rujukan : http:\/\/www.flatmtn.com\/<\/p>\n","protected":false},"excerpt":{"rendered":"<p>sebelum nih aku tak pernah lagi la setup manually benda nih, slalu dok pakai klik2 ja dlm WHM\/CPANEL utk create &hellip; <a href=\"https:\/\/matnet.my\/blog\/2008\/07\/ssl-cert-apache-https\/\" class=\"more-link\">More <span class=\"screen-reader-text\">SSL + Cert + Apache = https ??<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"class_list":["post-24","post","type-post","status-publish","format-standard","hentry","category-www","standard"],"_links":{"self":[{"href":"https:\/\/matnet.my\/blog\/wp-json\/wp\/v2\/posts\/24","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/matnet.my\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/matnet.my\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/matnet.my\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/matnet.my\/blog\/wp-json\/wp\/v2\/comments?post=24"}],"version-history":[{"count":2,"href":"https:\/\/matnet.my\/blog\/wp-json\/wp\/v2\/posts\/24\/revisions"}],"predecessor-version":[{"id":71,"href":"https:\/\/matnet.my\/blog\/wp-json\/wp\/v2\/posts\/24\/revisions\/71"}],"wp:attachment":[{"href":"https:\/\/matnet.my\/blog\/wp-json\/wp\/v2\/media?parent=24"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/matnet.my\/blog\/wp-json\/wp\/v2\/categories?post=24"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/matnet.my\/blog\/wp-json\/wp\/v2\/tags?post=24"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}