2012-03-13 4 views
5

디지털 서명에 대해 물어보고 싶습니다. 확실하지 않습니다. 일부 (PDF) 파일에 서명하는 데 사용할 자체 서명 된 인증서를 만드는 대신 내 데이터가 이미 확인 된 SSL 인증서를 가져오고 싶습니다.SSL 인증서를 사용하여 파일에 디지털 서명을 할 수 있습니까?

그러나 질문은 다음과 같습니다. SSL 인증서를 디지털 서명 파일에 사용할 수 있습니까? 아니면 어떤 방식으로도 호환되지 않습니까?

편집 : 명확하게 말하자면이 질문은 PDF 서명 방법이 아니며 SSL 인증서를 사용하여 파일에 서명 (또는 어떤 방식 으로든 변환) 할 수있는 경우에만 해당됩니다.

답변

4

디지털 서명 인증서를 지원하려면 digitalSignature 옵션이 있어야합니다. keyUsage 필드 (해당 프로그램에 서명하려는 경우 extendedKeyUsage 필드의 경우 codeSigning 옵션)가 있어야합니다.

서명을 수동으로 기존의 도구 나 (자바 예를 들어, 당신이 요구되지 않지만,이 코드는 어쨌든 유용 할 수 있습니다)을 수행 할 수 있습니다 : 당신의 자신없는 자체 서명 된 인증서를 만들려면

byte[] bytesToSign = loadMyData(); 
KeyStore ks = KeyStore.getInstance("pkcs12", "SunJSSE"); 
ks.load(new FileInputStream("cert.p12"), "passwd1".toCharArray()); 
PrivateKey privateKey = (PrivateKey) ks.getKey("myalias", "passwd2".toCharArray()); 
Signature sig = Signature.getInstance("SHA1withRSA", ks.getProvider()); 
sig.initSign(privateKey); 
sig.update(bytesToSign); 
byte[] signature = sig.sign(); 

openssl은 this SO answer을 참조하십시오.

또한 PDF 서명에 대해 궁금한 점이 있습니까? 귀하의 경우이 파일들을 별도의 해시 합계로 충분하지 않습니까?

편집 : 기존 도구에 의한 기호, 정확히 X.509 기호를 원하는 경우, 당신은 당신의 인증서에서 RSA 키를 추출 할 수 있습니다 약 keyUsage 필드를 귀찮게하지 않고 서명 않습니다.

+0

나는 PDF로 송장에 대해 이야기하고 있으며 법적 유효성을 갖기 위해 디지털 서명이 필요합니다. 그렇다면이 경우 단순히 합계로 충분하지 않습니다. – StormByte

+0

나는 이미이 목적을 위해 자체 서명 된 키를 쉽게 만들 수 있음을 알고 있지만, 그렇게 할 경우 내 고객이 받게 될 경고를 피하고자했습니다. – StormByte

1

핵심은 인증서가 여러 기관에서 서명 한 일반 RSA 공개 키일뿐입니다.

그래, 확실히 가능합니다.

최종 사용자가 쉽게 사용할 수있는 널리 사용되는 도구에 대해서는 알지 못하지만.

+0

감사합니다, 즉 내가 알고 싶었던거야. 왜냐하면 openssl이 사인하기 위해 처리 할 수 ​​있다면 작동 할 것이기 때문입니다. – StormByte

+1

자세한 내용은 alx3apps 대답을 참조하십시오. 그렇게 할 수는 있지만 keySage (또는 codeSigning to sign code)에 digitalSignature 옵션이 없으면 다른 구현에서는 서명을 거부 할 수 있습니다. – mfanto

1

예, 서명 및 SSL 인증서 여기

을 사용하여 파일의 서명을 확인할 수있는 것은 예입니다

SSLCERT='/XXXX/ssl/certs/fqdn.pem' 
SSLKEY='/XXXX/ssl/private_keys/fqdn.pem' 
# You might not need to specify a CA 
CACERTFILE='/XXXX/ssl/certs/ca.pem' 
# File to sign 
FILE='YYYYYYY' 

# Signs, needs ${SSLKEY} and ${FILE} 
openssl dgst -sha512 -sign ${SSLKEY} -out ${FILE}.sha512 ${FILE} 

# Then transfer the following files to another server: 
# - ${CACERTFILE} 
# - ${SSLCERT} 
# - ${FILE} 
# - ${FILE}.sha512 

# Check the certificate is valid 
openssl verify -verbose -CAfile ${CACERTFILE} ${SSLCERT} 
# Extract the pub key from the cert 
openssl x509 -in ${SSLCERT} -pubkey -noout > ${SSLCERT}.pub 
# Check the signature 
openssl dgst -sha512 -verify ${SSLCERT}.pub -signature ${FILE}.sha512 ${FILE}