Bagikan melalui


BUAT SERTIFIKAT (Transact-SQL)

Berlaku untuk: SQL ServerAzure SQL Database Azure SQL Managed Instance Azure Synapse Analytics

Menambahkan sertifikat ke database di SQL Server.

Fitur ini tidak kompatibel dengan ekspor database menggunakan Data Tier Application Framework (DACFx). Anda harus menjatuhkan semua sertifikat sebelum mengekspor.

Catatan

Di SQL Server 2022 (16.x), sertifikat dengan kunci privat dapat dicadangkan atau dipulihkan langsung ke dan dari file atau blob biner menggunakan format pasangan kunci publik (PKCS) #12 atau pertukaran informasi pribadi (PFX). Semua sertifikat yang dihasilkan sistem memiliki kekuatan minimum RSA-3072 di SQL Server 2022 (16.x).

Format PKCS #12 atau PFX adalah format biner untuk menyimpan sertifikat server, sertifikat perantara apa pun, dan kunci privat dalam satu file. File PFX biasanya memiliki ekstensi seperti .pfx dan .p12. Ini memudahkan pelanggan untuk mematuhi pedoman praktik terbaik keamanan saat ini dan standar kepatuhan yang melarang enkripsi RC4, dengan menghilangkan kebutuhan untuk menggunakan alat konversi seperti PVKConverter (untuk format PVK atau DER).

Konvensi sintaks transact-SQL

Catatan

Sintaks ini tidak didukung oleh kumpulan SQL tanpa server di Azure Synapse Analytics.

Sintaks

-- Syntax for SQL Server and Azure SQL Database  
  
CREATE CERTIFICATE certificate_name [ AUTHORIZATION user_name ]   
    { FROM <existing_keys> | <generate_new_keys> }  
    [ ACTIVE FOR BEGIN_DIALOG = { ON | OFF } ]  
  
<existing_keys> ::=   
    ASSEMBLY assembly_name  
    | {   
        [ EXECUTABLE ] FILE = 'path_to_file'  
        [ WITH [FORMAT = 'PFX',]
          PRIVATE KEY ( <private_key_options> ) ]   
      }  
    | {   
        BINARY = asn_encoded_certificate  
        [ WITH PRIVATE KEY ( <private_key_options> ) ]  
      }  
<generate_new_keys> ::=   
    [ ENCRYPTION BY PASSWORD = 'password' ]   
    WITH SUBJECT = 'certificate_subject_name'   
    [ , <date_options> [ ,...n ] ]   
  
<private_key_options> ::=  
      {   
        FILE = 'path_to_private_key'  
         [ , DECRYPTION BY PASSWORD = 'password' ]  
         [ , ENCRYPTION BY PASSWORD = 'password' ]    
      }  
    |  
      {   
        BINARY = private_key_bits  
         [ , DECRYPTION BY PASSWORD = 'password' ]  
         [ , ENCRYPTION BY PASSWORD = 'password' ]    
      }  
  
<date_options> ::=  
    START_DATE = 'datetime' | EXPIRY_DATE = 'datetime'  
-- Syntax for Parallel Data Warehouse  
  
CREATE CERTIFICATE certificate_name   
    { <generate_new_keys> | FROM <existing_keys> }  
    [ ; ]  
  
<generate_new_keys> ::=   
    WITH SUBJECT = 'certificate_subject_name'   
    [ , <date_options> [ ,...n ] ]   
  
<existing_keys> ::=   
    {   
      FILE ='path_to_file'  
      WITH PRIVATE KEY   
         (   
           FILE = 'path_to_private_key'  
           , DECRYPTION BY PASSWORD ='password'   
         )  
    }  
  
<date_options> ::=  
    START_DATE ='datetime' | EXPIRY_DATE ='datetime'  

Argumen

certificate_name
Adalah nama untuk sertifikat dalam database.

user_name OTORISASI
Adalah nama pengguna yang memiliki sertifikat ini.

assembly_name RAKITAN
Menentukan rakitan bertanda tangan yang telah dimuat ke dalam database.

[ EXECUTABLE ] FILE = 'path_to_file'
Menentukan jalur lengkap, termasuk nama file, ke file yang dikodekan DER yang berisi sertifikat. Jika opsi EXECUTABLE digunakan, file adalah DLL yang telah ditandatangani oleh sertifikat. path_to_file dapat berupa jalur lokal atau jalur UNC ke lokasi jaringan. File diakses dalam konteks keamanan akun layanan SQL Server. Akun ini harus memiliki izin sistem file yang diperlukan.

Penting

Azure SQL Database tidak mendukung pembuatan sertifikat dari file atau menggunakan file kunci privat.

BINER = asn_encoded_certificate
Byte sertifikat yang dikodekan ASN ditentukan sebagai konstanta biner.
Berlaku untuk: SQL Server 2012 (11.x) dan yang lebih baru.

WITH FORMAT = 'PFX'
Berlaku untuk: SQL Server 2022 (16.x) dan yang lebih baru
Menentukan pembuatan sertifikat dari file PFX. Klausa ini opsional.

DENGAN KUNCI PRIVAT
Menentukan bahwa kunci privat sertifikat dimuat ke dalam SQL Server. Klausa ini tidak valid ketika sertifikat sedang dibuat dari rakitan. Untuk memuat kunci privat sertifikat yang dibuat dari rakitan, gunakan ALTER CERTIFICATE.

FILE ='path_to_private_key'
Menentukan jalur lengkap, termasuk nama file, ke kunci privat. path_to_private_key dapat berupa jalur lokal atau jalur UNC ke lokasi jaringan. File diakses dalam konteks keamanan akun layanan SQL Server. Akun ini harus memiliki izin sistem file yang diperlukan.

Penting

Opsi ini tidak tersedia dalam database mandiri atau di Azure SQL Database.

BINER = private_key_bits
Berlaku untuk: SQL Server (Dimulai dengan SQL Server 2012 (11.x)) dan Azure SQL Database.

Bit kunci privat ditentukan sebagai konstanta biner. Bit ini dapat dalam bentuk terenkripsi. Jika dienkripsi, pengguna harus memberikan kata sandi dekripsi. Pemeriksaan kebijakan kata sandi tidak dilakukan pada kata sandi ini. Bit kunci privat harus dalam format file PVK.

DEKRIPSI MENURUT KATA SANDI = 'key_password'
Menentukan kata sandi yang diperlukan untuk mendekripsi kunci privat yang diambil dari file. Klausa ini bersifat opsional jika kunci privat dilindungi oleh kata sandi null. Menyimpan kunci privat ke file tanpa perlindungan kata sandi tidak disarankan. Jika kata sandi diperlukan tetapi tidak ada kata sandi yang ditentukan, pernyataan gagal.

ENKRIPSI MENURUT KATA SANDI = 'kata sandi'
Menentukan kata sandi yang digunakan untuk mengenkripsi kunci privat. Gunakan opsi ini hanya jika Anda ingin mengenkripsi sertifikat dengan kata sandi. Jika klausa ini dihilangkan, kunci privat dienkripsi menggunakan kunci master database. kata sandi harus memenuhi persyaratan kebijakan kata sandi Windows komputer yang menjalankan instans SQL Server. Untuk informasi selengkapnya, lihat Kebijakan Kata Sandi.

SUBJECT = 'certificate_subject_name'
Subjek istilah mengacu pada bidang dalam metadata sertifikat seperti yang didefinisikan dalam standar X.509. Panjang subjek tidak boleh lebih dari 64 karakter, dan batas ini diberlakukan untuk SQL Server di Linux. Untuk SQL Server di Windows, panjang subjek bisa hingga 128 karakter. Subjek yang melebihi 128 karakter dipotong saat disimpan dalam katalog, tetapi objek besar biner (BLOB) yang berisi sertifikat mempertahankan nama subjek lengkap.

START_DATE = 'datetime'
Apakah tanggal sertifikat menjadi valid. Jika tidak ditentukan, START_DATE diatur sama dengan tanggal saat ini. START_DATE dalam waktu UTC dan dapat ditentukan dalam format apa pun yang dapat dikonversi ke tanggal dan waktu.

EXPIRY_DATE = 'datetime'
Adalah tanggal kedaluwarsa sertifikat. Jika tidak ditentukan, EXPIRY_DATE diatur ke tanggal satu tahun setelah START_DATE. EXPIRY_DATE dalam waktu UTC dan dapat ditentukan dalam format apa pun yang dapat dikonversi ke tanggal dan waktu. SQL Server Service Broker memeriksa tanggal kedaluwarsa. Pencadangan dengan Enkripsi menggunakan sertifikat juga memeriksa tanggal kedaluwarsa dan tidak akan mengizinkan pencadangan baru dibuat dengan sertifikat yang kedaluwarsa, tetapi akan memungkinkan pemulihan dengan sertifikat yang kedaluwarsa. Namun, kedaluwarsa tidak diberlakukan saat sertifikat digunakan untuk enkripsi database atau Always Encrypted.

ACTIVE FOR BEGIN_DIALOG = { ON | NONAKTIF }
Membuat sertifikat tersedia untuk inisiator percakapan dialog Service Broker. Nilai defaultnya adalah AKTIF.

Keterangan

Sertifikat adalah tingkat database yang dapat diamankan yang mengikuti standar X.509 dan mendukung bidang X.509 V1. CREATE CERTIFICATE dapat memuat sertifikat dari file, konstanta biner, atau rakitan. Pernyataan ini juga dapat menghasilkan pasangan kunci dan membuat sertifikat yang ditandatangani sendiri.

Kunci Privat harus <= 2500 byte dalam format terenkripsi. Kunci privat yang dihasilkan oleh SQL Server panjangnya 1024 bit melalui SQL Server 2014 (12.x) dan panjangnya 2048 bit dimulai dengan SQL Server 2016 (13.x). Kunci privat yang diimpor dari sumber eksternal memiliki panjang minimum 384 bit dan panjang maksimum 4.096 bit. Panjang kunci privat yang diimpor harus berupa kelipatan bilangan bulat 64 bit. Sertifikat yang digunakan untuk TDE terbatas pada ukuran kunci privat 3456 bit.

Seluruh Nomor Seri sertifikat disimpan tetapi hanya 16 byte pertama yang muncul dalam tampilan katalog sys.certificates.

Seluruh bidang Penerbit sertifikat disimpan tetapi hanya 884 byte pertama dalam tampilan katalog sys.certificates.

Kunci privat harus sesuai dengan kunci publik yang ditentukan oleh certificate_name.

Saat Anda membuat sertifikat dari kontainer, memuat kunci privat bersifat opsional. Tetapi ketika SQL Server menghasilkan sertifikat yang ditandatangani sendiri, kunci privat selalu dibuat. Secara default, kunci privat dienkripsi menggunakan kunci master database. Jika kunci master database tidak ada dan tidak ada kata sandi yang ditentukan, pernyataan gagal.

Opsi ENCRYPTION BY PASSWORD ini tidak diperlukan saat kunci privat dienkripsi dengan kunci master database. Gunakan opsi ini hanya ketika kunci privat dienkripsi dengan kata sandi. Jika tidak ada kata sandi yang ditentukan, kunci privat sertifikat akan dienkripsi menggunakan kunci master database. Jika kunci master database tidak dapat dibuka, menghilangkan klausul ini menyebabkan kesalahan.

Anda tidak perlu menentukan kata sandi dekripsi saat kunci privat dienkripsi dengan kunci master database.

Catatan

Fungsi bawaan untuk enkripsi dan penandatanganan tidak memeriksa tanggal kedaluwarsa sertifikat. Pengguna fungsi-fungsi ini harus memutuskan kapan harus memeriksa kedaluwarsa sertifikat.

Deskripsi biner sertifikat dapat dibuat dengan menggunakan fungsi CERTENCODED (Transact-SQL) dan CERTPRIVATEKEY (Transact-SQL). Misalnya yang menggunakan CERTPRIVATEKEY dan CERTENCODED untuk menyalin sertifikat ke database lain, lihat contoh B dalam artikel CERTENCODED (Transact-SQL).

Algoritma MD2, MD4, MD5, SHA, dan SHA1 tidak digunakan lagi di SQL Server 2016 (13.x). Hingga SQL Server 2016 (13.x), sertifikat yang ditandatangani sendiri dibuat menggunakan SHA1. Dimulai dengan SQL Server 2017 (14.x), sertifikat yang ditandatangani sendiri dibuat menggunakan SHA2_256.

Izin

CREATE CERTIFICATE Memerlukan izin pada database. Hanya login Windows, login SQL Server, dan peran aplikasi yang dapat memiliki sertifikat. Grup dan peran tidak dapat memiliki sertifikat.

Contoh

J. Membuat sertifikat yang ditandatangani sendiri

Contoh berikut membuat sertifikat yang disebut Shipping04. Kunci privat sertifikat ini dilindungi menggunakan kata sandi.

CREATE CERTIFICATE Shipping04   
   ENCRYPTION BY PASSWORD = 'pGFD4bb925DGvbd2439587y'  
   WITH SUBJECT = 'Sammamish Shipping Records',   
   EXPIRY_DATE = '20201031';  
GO  

B. Membuat sertifikat dari file

Contoh berikut membuat sertifikat dalam database, memuat pasangan kunci dari file.

CREATE CERTIFICATE Shipping11   
    FROM FILE = 'c:\Shipping\Certs\Shipping11.cer'   
    WITH PRIVATE KEY (FILE = 'c:\Shipping\Certs\Shipping11.pvk',   
    DECRYPTION BY PASSWORD = 'sldkflk34et6gs%53#v00');  
GO   

Penting

Azure SQL Database tidak mendukung pembuatan sertifikat dari file.

C. Membuat sertifikat dari file yang dapat dieksekusi yang ditandatangani

CREATE CERTIFICATE Shipping19   
    FROM EXECUTABLE FILE = 'c:\Shipping\Certs\Shipping19.dll';  
GO  

Atau, Anda dapat membuat rakitan dari dll file, lalu membuat sertifikat dari rakitan.

CREATE ASSEMBLY Shipping19   
    FROM 'c:\Shipping\Certs\Shipping19.dll'   
    WITH PERMISSION_SET = SAFE;  
GO  
CREATE CERTIFICATE Shipping19 FROM ASSEMBLY Shipping19;  
GO  

Penting

Azure SQL Database tidak mendukung pembuatan sertifikat dari file.

Penting

Dimulai dengan SQL Server 2017 (14.x), opsi konfigurasi server 'keamanan ketat CLR' mencegah pemuatan rakitan tanpa terlebih dahulu menyiapkan keamanan untuk mereka. Muat sertifikat, buat login darinya, berikan UNSAFE ASSEMBLY login tersebut, lalu muat assembly.

D. Membuat sertifikat yang ditandatangani sendiri

Contoh berikut membuat sertifikat yang disebut Shipping04 tanpa menentukan kata sandi enkripsi. Contoh ini dapat digunakan dengan Analytics Platform System (PDW).

CREATE CERTIFICATE Shipping04   
   WITH SUBJECT = 'Sammamish Shipping Records';  
GO  

E. Membuat sertifikat dari file PFX

CREATE CERTIFICATE Shipping04
    FROM FILE = 'c:\storedcerts\shipping04cert.pfx'
    WITH 
    FORMAT = 'PFX', 
	PRIVATE KEY (
        DECRYPTION BY PASSWORD = '9n34khUbhk$w4ecJH5gh'
	);  

Lihat Juga

UBAH SERTIFIKAT (Transact-SQL)
HILANGKAN SERTIFIKAT (T-SQL)
SERTIFIKAT CADANGAN (Transact-SQL)
Hierarki Enkripsi
EVENTDATA (Transact-SQL)
CERTENCODED (Transact-SQL)
CERTPRIVATEKEY (Transact-SQL)
CERT_ID (T-SQL)
CERTPROPERTY (Transact-SQL)