יש לכם דומיין ראשי – yourdomain.com – והמון סאבדומיינים שלו – sub1.yourdomain.com, sub2.yourdomain.com וכך הלאה. השרת שלכם הוא שרת סיפאנל ולכן יש לכם שתי אפשרויות בנויות לעדכון התעודה לכל הדומיינים:
- כניסה לחשבון סיפאנל של כל אחד מהסאב דומיינים והגדרת התעודה.
- כניסה ל WHM תחת Install an SSL Certificate on a domain והתקנת התעודה עבור כל אחד מהסאבדומיינים.
שתי השיטות עובדות טוב אבל אם יש לכם עשרות סאבדומיינים זו עבודת נמלים מסורבלת. יש דרך קצרה ומהירה יותר – להשתמש בסקריפט שעושה שימוש ב API של WHM כדי לעדכן את כל התעודות.
להלן הסקריפט הראשי:
#!/usr/local/cpanel/3rdparty/bin/perl use strict; use LWP::UserAgent; use LWP::Protocol::https; use MIME::Base64; use IO::Socket::SSL; use URI::Escape; my $user = "root"; my $pass = "ENTER_PASSWORD"; my $auth = "Basic " . MIME::Base64::encode( $user . ":" . $pass ); my $ua = LWP::UserAgent->new( ssl_opts => { verify_hostname => 0, SSL_verify_mode => 'SSL_VERIFY_NONE', SSL_use_cert => 0 }, ); my $dom = $ARGV[0]; my $certfile = "/root/domain_shared.crt"; my $keyfile = "/root/domain_shared.key"; my $cafile = "/root/domain_shared.ca"; my $certdata; my $keydata; my $cadata; open(my $certfh, '<', $certfile) or die "cannot open file $certfile"; { local $/; $certdata = <$certfh>; } close($certfh); open(my $keyfh, '<', $keyfile) or die "cannot open file $keyfile"; { local $/; $keydata = <$keyfh>; } close($keyfh); open(my $cafh, '<', $cafile) or die "cannot open file $cafile"; { local $/; $cadata = <$cafh>; } close($cafh); my $cert = uri_escape($certdata); my $key = uri_escape($keydata); my $ca = uri_escape($cadata); my $request = HTTP::Request->new( POST => "https://127.0.0.1:2087/json-api/installssl?api.version=1&domain=$dom&crt=$cert&key=$key&cab=$ca" ); $request->header( Authorization => $auth ); my $response = $ua->request($request); print $response->content;
צריך לעדכן בסקריפט את הסיסמא של root איפה שכתוב ENTER_PASSWORD. כמו כן צריך לעדכן את הנתיבים של התעודה, המפתח וה CA איפה שרשום domain_shared.
כמובן שיש לשים את התעודה, המפתח וה-CA בנתיב שהגדרתם בקובץ.
כדי להריץ את הסקריפט על כל הדומיינים שהתעודה עבורם בסיפאנל, יש להשתמש בתוספת סקריפט הבאה:
#!/bin/sh for i in `cat /etc/userdomains |grep -v YOUR_DOMAIN|cut -f1 -d:`; do ./update_ssl.pl $i; done
יש לשנות את YOUR_DOMAIN בדומיין שלכם
בהצלחה