Tạo khoá và chứng chỉ cho tính năng Đăng nhập một lần

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 của Google Workspace chấp nhận các chứng chỉ và khoá 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 tập hợp các khoá công khai và riêng tư, cũng như một chứng chỉ X.509 chứa khoá công khai. Sau khi có chứng chỉ hoặc khoá công khai, bạn cần đăng ký chứng chỉ hoặc khoá đó với Google. Bạn có thể thực hiện việc này bằng cách 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. Dưới đâ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à riêng tư, nhưng công cụ OpenSSL 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

Quá trình 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á bằng PEM và lưu trữ khoá đó trong tệp rsaprivkey.pem. Ví dụ này tạo một khoá 2048 bit, có thể dù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ố cách triển khai, đặc biệt là dựa trên Java, có thể yêu cầu DER hoặc PKCS8. Bạn có thể tạo các định dạng này bằng cách thực hiện thêm các bước sau:

  1. openssl rsa -in rsaprivkey.pem -pubout -outform DER -out rsapubkey.der
  2. openssl 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.derrsaprivkey.der).

Tạo khoá riêng tư DSA

Quá trình tạo khoá DSA bao gồm 2 bước:

  1. openssl dsaparam -out dsaparam.pem 2048
  2. openssl gendsa -out dsaprivkey.pem dsaparam.pem

Bước đầu tiên 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 một 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 tạo khoá công khai và riêng tư. 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á sang định dạng DER (nhị phân), bạn có thể thực hiện các bước sau:

  1. openssl dsa -in dsaprivkey.pem -outform DER -pubout -out dsapubkey.der
  2. openssl 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ư sang đị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à 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 định cấu hình 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à chuỗi đại diện của chứng chỉ ở định dạng nhị phân x509. Loại dấu vân tay phụ thuộc vào thuật toán dùng để tạo dấu 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 sử dụng lệnh sau (thay thế tên tệp .pem chứng chỉ thực tế của bạn):

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) có thể dùng để tạo chứng chỉ sử dụng với Google Workspace. Hãy làm theo các bước bên dưới để tạo cặp khoá công khai và riêng tư, cũng như chứng chỉ trong .NET:

  1. makecert -r -pe -n "CN=Test Certificate" -sky exchange -sv testcert.pvk testcert.cer
  2. pvk2pfx -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 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. Tệp PFX chứa cả khoá công khai và 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. Ngoài ra, bạn có thể sử dụng testcert.pfx từ Bước 2 để tạo thực thể X509Certificate2 (.NET 2.0+) nhằm 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ư của riêng họ và các chứng chỉ được liên kết để sử dụng trong các lược đồ xác thực yêu cầu chữ ký số. keytool lưu trữ khoá và chứng chỉ trong một "kho khoá". Đối với cách 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

  1. keytool -genkey -alias dsassokey -keyalg "DSA" -keysize 2048 -validity 180 -sigalg "SHA256withDSA"
  2. 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 gian hợp lệ 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

  1. keytool -genkey -alias rsassokey -keyalg "RSA" -keysize 2048 -validity 180
  2. keytool -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 gian hợp lệ 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 lên rsasso.cer 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ật mã học 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ặ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 để sử dụng với dịch vụ SSO của Google Workspace.

Tạo cặp khoá công khai và 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();
   }
  }
}

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 ra 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à sử 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 thành 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 và đăng nhập với tư cách 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 phần Thiết lập dịch vụ đăng nhập một lần (SSO) với nhà cung cấp dịch vụ danh tính bên thứ ba.