יש לכם דומיין ראשי – 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 בדומיין שלכם
בהצלחה
