Google Workspace cung cấp dịch vụ Đăng nhập một lần (SSO) cho khách hàng sử dụng Google Workspace hoặc Google Workspace for Education. Dịch vụ Đăng nhập một lần bằng Google Workspace chấp nhận các khoá và chứng chỉ công khai được tạo bằng thuật toán RSA hoặc DSA. Để sử dụng dịch vụ này, bạn cần tạo một nhóm khoá công khai và khoá riêng tư cũng như một chứng chỉ X.509 chứa khoá công khai. Sau khi có khoá công khai hoặc chứng chỉ, bạn cần đăng ký khoá công khai hoặc chứng chỉ đó với Google. Bạn có thể làm việc này bằng cách chỉ cần tải khoá hoặc chứng chỉ lên thông qua Bảng điều khiển dành cho quản trị viên của Google.
Cách bạn tạo khoá và chứng chỉ thường phụ thuộc vào nền tảng phát triển và ngôn ngữ lập trình mà bạn ưu tiên. Sau đây là một số cách để tạo khoá và chứng chỉ mà dịch vụ SSO của Google Workspace cần.
Sử dụng OpenSSL
Mặc dù có nhiều phương thức để tạo cặp khoá công khai và khoá riêng tư, nhưng công cụ OpenSSL mã nguồn mở là một trong những phương thức phổ biến nhất. Công cụ này đã được chuyển sang tất cả các nền tảng chính và cung cấp một giao diện dòng lệnh đơn giản để tạo khoá.
Tạo khoá riêng tư RSA
Việc tạo khoá riêng tư RSA bằng OpenSSL chỉ bao gồm một bước:
openssl genrsa -out rsaprivkey.pem 2048
Lệnh này sẽ tạo một khoá riêng tư được mã hoá dạng PEM và lưu trữ khoá đó trong tệp rsaprivkey.pem. Ví dụ này tạo một khoá 2048 bit, khoá này sẽ hoạt động cho hầu hết mọi mục đích. Khoá riêng tư thu được phải được giữ bí mật và dùng để ký cũng như giải mã dữ liệu.
Một số hoạt động triển khai, đặc biệt là hoạt động triển khai dựa trên Java, có thể yêu cầu DER hoặc PKCS8. Ví dụ: bạn có thể tạo DER hoặc PKCS8 bằng các bước bổ sung sau:
openssl rsa -in rsaprivkey.pem -pubout -outform DER -out rsapubkey.deropenssl pkcs8 -topk8 -inform PEM -outform DER -in rsaprivkey.pem -out rsaprivkey.der -nocrypt
Bước 1 tạo khoá công khai ở định dạng DER.
Bước 2 tạo khoá riêng tư ở định dạng pkcs8 và DER. Sau khi tạo, bạn có thể sử dụng các khoá này (rsapubkey.der và rsaprivkey.der).
Tạo khoá riêng tư DSA
Quá trình tạo khoá DSA bao gồm 2 bước:
openssl dsaparam -out dsaparam.pem 2048openssl gendsa -out dsaprivkey.pem dsaparam.pem
Bước đầu tiên sẽ tạo một tệp tham số DSA, dsaparam.pem. Trong trường hợp này, tệp này hướng dẫn OpenSSL tạo khoá 2048 bit ở Bước 2. Bản thân tệp dsaparam.pem không phải là một khoá và có thể bị loại bỏ sau khi khoá công khai và khoá riêng tư được tạo. Bước thứ hai thực sự tạo khoá riêng tư trong tệp dsaprivkey.pem. Bạn nên giữ bí mật khoá này.
Để xuất khoá ở định dạng DER (nhị phân), bạn có thể làm theo các bước sau:
openssl dsa -in dsaprivkey.pem -outform DER -pubout -out dsapubkey.deropenssl pkcs8 -topk8 -inform PEM -outform DER -in dsaprivkey.pem -out dsaprivkey.der -nocrypt
Bước 1 trích xuất khoá công khai sang định dạng DER.
Bước 2 chuyển đổi khoá riêng tư thành định dạng pkcs8 và DER. Sau khi hoàn tất, bạn có thể sử dụng cặp khoá công khai (dsapubkey.der) và khoá riêng tư (dsaprivkey.der) này
Tạo chứng chỉ
Sau khi có cặp khoá, bạn có thể dễ dàng tạo chứng chỉ X.509. Chứng chỉ này chứa khoá công khai tương ứng, cùng với một số siêu dữ liệu liên quan đến tổ chức đã tạo chứng chỉ. Hãy làm theo bước này để tạo chứng chỉ tự ký từ khoá riêng tư RSA hoặc DSA:
openssl req -new -x509 -key dsaprivkey.pem -out dsacert.pem
Sau khi bạn trả lời một số câu hỏi, chứng chỉ sẽ được tạo và lưu dưới dạng dsacert.pem. Đây là tệp mà bạn tải lên Google Workspace thông qua Bảng điều khiển khi thiết lập tính năng SSO.
Tạo dấu vân tay chứng chỉ
Một số ứng dụng yêu cầu dấu vân tay chứng chỉ X.509 thay vì chính chứng chỉ X.509. Dấu vân tay là một thông báo của chứng chỉ ở định dạng nhị phân x509. Loại vân tay phụ thuộc vào thuật toán dùng để tạo vân tay, chẳng hạn như SHA-1 hoặc SHA-256.
Để tạo dấu vân tay SHA-256 từ chứng chỉ X.509, hãy dùng lệnh sau (thay thế tên tệp .pem thực tế của chứng chỉ):
openssl x509 -noout -fingerprint -sha256 -inform pem -in "GoogleIDPCertificate-domain.com.pem"
Sử dụng Microsoft Visual Studio cho .NET
Microsoft Visual Studio 2005 cung cấp các tiện ích (trong thư mục Common7ToolsBin) mà bạn có thể dùng để tạo chứng chỉ khi sử dụng Google Workspace. Hãy làm theo các bước dưới đây để tạo cặp khoá công khai và riêng tư cũng như chứng chỉ trong .NET:
makecert -r -pe -n "CN=Test Certificate" -sky exchange -sv testcert.pvk testcert.cerpvk2pfx -pvk testcert.pvk -spc testcert.cer -pfx testcert.pfx
Theo mặc định, thuật toán RSA được dùng trong các lệnh ở trên. Bước 1 sử dụng Công cụ tạo chứng chỉ (makecert.exe) để tạo một chứng chỉ X.509 tự ký có tên là testcert.cer và khoá riêng tư tương ứng.
Bước 2 sử dụng Công cụ pvk2pfx (pvk2pfx.exe) để tạo tệp Trao đổi thông tin cá nhân (PFX) từ tệp CER và PVK. PFX chứa cả khoá công khai và khoá riêng tư của bạn.
Bạn có thể tải tệp testcert.cer được tạo ở Bước 1 lên Google Workspace bằng Bảng điều khiển; và testcert.pfx ở Bước 2 có thể dùng để tạo một thực thể X509Certificate2 (.NET 2.0 trở lên) để ký phản hồi SAML.
Sử dụng Keytool trong Java
Nhà phát triển Java có thể sử dụng tiện ích keytool có trong JDK tiêu chuẩn để tạo cặp khoá công khai/riêng tư và chứng chỉ X.509. keytool là một tiện ích quản lý khoá và chứng chỉ cho phép người dùng quản trị cặp khoá công khai/riêng tư và các chứng chỉ liên kết của riêng họ để sử dụng trong các lược đồ xác thực yêu cầu chữ ký số. keytool lưu trữ các khoá và chứng chỉ trong "kho khoá". Đối với việc triển khai mặc định, đây chỉ là một tệp (.keystore) trong thư mục gốc của người dùng. Khoá riêng tư được bảo vệ bằng mật khẩu.
Tạo cặp khoá DSA
keytool -genkey -alias dsassokey -keyalg "DSA" -keysize 2048 -validity 180 -sigalg "SHA256withDSA"keytool -export -alias dsassokey -file dsasso.cer
Bước 1 tạo một cặp khoá công khai/riêng tư có kích thước 2048 và thời hạn hiệu lực là 180 ngày bằng thuật toán DSA.
Bước 2 tạo chứng chỉ X.509 (dsasso.cer) từ khoá công khai. Sau đó, bạn tải dsasso.cer lên Google Workspace bằng Bảng điều khiển.
Tạo cặp khoá RSA
keytool -genkey -alias rsassokey -keyalg "RSA" -keysize 2048 -validity 180keytool -export -alias rsassokey -file rsasso.cer
Bước 1 tạo một cặp khoá công khai/riêng tư có kích thước 2048 và thời hạn hiệu lực là 180 ngày bằng thuật toán RSA.
Bước 2 tạo chứng chỉ X.509 (rsasso.cer) từ khoá công khai. Sau đó, bạn tải
rsasso.cer lên Google Workspace bằng Bảng điều khiển.
Sử dụng Kiến trúc mã hoá Java
Kiến trúc mã hoá Java (JCA) cung cấp các lớp và giao diện cốt lõi để tạo và thao tác với các thuộc tính bảo mật. JCA bao gồm các phần của API Bảo mật SDK Java 2 liên quan đến mật mã học. Khi sử dụng API này, bạn có thể dễ dàng tạo các cặp khoá công khai và riêng tư theo thuật toán mong muốn. Dưới đây là mã mẫu tạo khoá DSA hoặc RSA để dùng với dịch vụ SSO của Google Workspace.
Tạo một cặp khoá công khai và khoá riêng tư
import java.io.*;
import java.security.*;
public class KeyGenDSA {
public static void main(String[] args) {
try {
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("DSA");
SecureRandom random = SecureRandom.getInstanceStrong();
keyGen.initialize(2048, random);
KeyPair pair = keyGen.generateKeyPair();
PrivateKey priv = pair.getPrivate();
PublicKey pub = pair.getPublic();
byte[] encPriv = priv.getEncoded();
FileOutputStream privfos = new FileOutputStream("DSAPrivateKey.key");
privfos.write(encPriv);
privfos.close();
byte[] encPub = pub.getEncoded();
FileOutputStream pubfos = new FileOutputStream("DSAPublicKey.key");
pubfos.write(encPub);
pubfos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Đoạn mã trên sử dụng KeyPairGenerator để tạo một cặp khoá DSA. Các khoá được tạo sẽ ở định dạng nhị phân và được xuất vào các tệp riêng lẻ.
Sau khi có các khoá, bạn có thể đăng ký khoá công khai với Google Workspace và dùng khoá riêng tư để ký SAMLResponse. Để tạo một cặp khoá RSA thay vì DSA, bạn chỉ cần thay thế "DSA" trong mã bằng "RSA".
Đăng ký chứng chỉ hoặc khoá công khai với Google Workspace
Sau khi bạn hoàn tất phần khó khăn là tạo khoá và chứng chỉ, phần tiếp theo sẽ rất đơn giản. Để đăng ký chứng chỉ hoặc khoá công khai với Google Workspace, bạn cần truy cập vào Bảng điều khiển dành cho quản trị viên rồi đăng nhập với tư cách là quản trị viên. Chọn Bảo mật, sau đó chọn Thiết lập dịch vụ đăng nhập một lần (SSO) rồi điền tất cả các trường trên trang trong mục Thiết lập dịch vụ đăng nhập một lần (SSO) bằng nhà cung cấp danh tính bên thứ ba.