Certificati digitali in SQL Server 2005

di Luca Bianchi, in SQL Server,

Ho ricevuto una mail in merito al mio articolo sulla cifratura dei dati in SQL Server 2005 (http://www.visual-basic.it/articoli/lbSQLprotection.htm) dove un utente mi chiedeva cosa sarebbe successo alla scadenza di un certificato digitale. La risposta è molto semplice: non succede nulla.
Come si può leggere nel BOL alla voce CREATE CERTIFICATE, viene riportato che "Built-in functions for encryption and signing do not check the expiration dates of certificates. Users of these functions must decide when to check certificate expiration." Pertanto le proprietà relative al range temporale di validità (sia la EXPIRY_DATE che la START_DATE) vengono, allo stato attuale, ignorate. E' possibile testare la cosa riadattando lo script fornito nell'articolo, ovvero generando il database, la tabella di test e la DMK con

=======================
USE master;

IF EXISTS (SELECT 1 FROM sys.databases WHERE name = 'CryptoDB')
DROP DATABASE CryptoDB;
GO

CREATE DATABASE CryptoDB;
GO

USE CryptoDB;

CREATE TABLE dbo.CreditCard (
ID SMALLINT IDENTITY (1, 1) NOT NULL,
Nome VARCHAR(20) NOT NULL,
Tipo VARCHAR(20) NOT NULL,
Numero VARBINARY(128) NOT NULL,
Note VARCHAR(255) NULL
);

CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'Sc7\n>qp*X¤0?@';
GO
=======================

ed a questo punto creando 2 certificati: uno già scaduto ed uno con una start_date futura

=======================
CREATE CERTIFICATE ExpiredCert
WITH SUBJECT = 'Test Cert SQL2K5 - LB',
START_DATE = '20060101',
EXPIRY_DATE = '20060301';

CREATE CERTIFICATE NotYetValidCert
WITH SUBJECT = 'Test Cert SQL2K5 - LB',
START_DATE = '20060401',
EXPIRY_DATE = '20061231';
=======================

da notare che in fase di creazione viene visualizzato un warning rispettivamente di

Warning: The certificate you created is expired.

e

Warning: The certificate you created is not yet valid; its start date is in the future.

Tuttavia è possibile utilizzare entrambi i certificati per inserire dei dati...

=======================
INSERT dbo.CreditCard VALUES (
'Luca' ,
'Visa' ,
EncryptByCert(Cert_ID('ExpiredCert'), '1111-2222-3333-4444') ,
'Cifrato con Certificato digitale scaduto')

INSERT dbo.CreditCard VALUES (
'Lorenzo' ,
'Visa' ,
EncryptByCert(Cert_ID('NotYetValidCert'), '1234-5678-8765-4321') ,
'Cifrato con Certificato digitale non ancora valido')
=======================

...ed anche per leggerli...

=======================
SELECT Nome,
Tipo,
CONVERT(varchar, DecryptByCert(Cert_ID('ExpiredCert'), Numero)),
Note
FROM dbo.CreditCard

SELECT Nome,
Tipo,
CONVERT(varchar, DecryptByCert(Cert_ID('NotYetValidCert'), Numero)),
Note
FROM dbo.CreditCard
=======================

In questa versione di SQL Server un eventuale controllo di validità del certificato deve essere fatto in maniera manuale accedendo alle informazioni contenute nella vista sys.certificates ma è auspicabile che nelle prossime versioni di SQL Server l'infrastruttura PKI venga potenziata e vengano rese disponibili delle funzionalità aggiuntive.

Bye

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Nella stessa categoria
I più letti del mese