로그인 URL의 일부가 인증을 요구하는 서버로 작업하고 있습니다. 이 계획은 (매뉴얼에서 권장) 작동 방법은openssl을 사용하여 Java 서명 서명 방법을 에뮬레이트하는 방법은 무엇입니까?
- 공개/개인 키 쌍 인증서가 생성됩니다
- (자바 키 저장소를 생성) 자바 JDK 키 도구를 사용하여 생성되는 것입니다 키 쌍을 사용하여 Java JDK keytool
- 인증서가 서버에 설치됩니다.
클라이언트에서 로그인 (내 코드)
- 는 일반 텍스트 토큰 문자열을
- 징후 이
- 서명 된 토큰 문자열을 포함하는 일반 텍스트 토큰 개인 키를 사용하여 SHA1와 문자열 DSA를 생성 로그인 URL에.
Java 키 도구는 키 저장소에서 개인 키를 내보낼 수있는 메커니즘을 제공하지 않지만, 별도 나는 키 저장소에서 개인 키를 추출하고 파일에 저장하는 자바 코드를 - How do I list/export private keys from a keystore?에 따라.
이 모든 것은 클라이언트가 Java를 사용하여 서명을 할 때 다음과 같은 코드로 작동합니다.
String plaintext = "This is a sample plaintext token string";
Signature instance = Signature.getInstance("SHA1withDSA");
instance.initSign(privateKey);
instance.update((plaintext).getBytes());
byte[] signature = instance.sign();
클라이언트가 PHP를 사용하여 서명을 할 때도 다음과 같은 코드로 작동합니다. . 여기에 내가 지금 고객이 배쉬 스크립트 및하려면 openssl을 사용하여 로그인 URL을 구성하고자하는 상황이 그러나 개인 키는
$privateKey = openssl_pkey_get_private("file://$keyfile", $keystorePassword);
openssl_sign($paramsEncoded, $signature, $privateKey, OPENSSL_ALGO_DSS1))
] PHP에서 Java 키 저장소 파일에서 검색 - 그것은 작동하지 않습니다. 해당 코드의 가장 최신 버전은 SHA1 메시지 요약과 DSA 서명을 수행하는 다음과 같습니다. 그러나 서버는 토큰을 거부합니다.
echo $tokenString | openssl dgst -sha1 > tokendigest
openssl dgst -dss1 -passin pass:$storePassword -sign $privateKeyFile > tokensigned
나는 자바 서명 서명 방법은 다이제스트에 서명 아니라 다이제스트 알고리즘 ID 및 다이제스트의 연결에 서명하지 않는 것을 제안이 게시물 (
Using SHA1 and RSA with java.security.Signature vs. MessageDigest and Cipher)을 가로 질러왔다. 게시물의 코드를 단계별로 실행 한 결과, SHA1의 경우 다이제스트 앞에 바이트가
48 33 48 9 6 5 43 14 3 2 26 5 0 4 20
접두어로 있어야합니다. 하지만 추가 한 후에도 opensll을 사용하여 서버에서 사용할 수있는 서명 된 토큰을 생성 할 수 없습니다.
누구든지 openssl을 사용하여 Java 서명 서명 방법을 에뮬레이트하는 방법을 알고 있습니까?
"토큰 로그인에 오류가 발생했습니다"와 같은 결과가 나타났습니다. 나는 openssl 검증을 추가했다. (아래) - openssl은 Verified OK를보고했다. 'echo $ tokenString | openssl dgst -dss1 -passin pass : $ storePassword -sign $ privateKeyFile> $ signedTokenOpensslFile echo $ tokenString | openssl dgst -dss1 -verify $ publicKeyFile -signature $ signedTokenOpensslFile' – Torid
@ Torid : 문제는 'echo'가 문자열에 추가하는 새 줄 바꿈 일 수 있습니다. 'echo -n'을 시도하십시오. –
예. 'echo -n'은 그것을 고쳤습니다. 나는 그것이 나를 약간 바보 같이 느끼게 할 때조차도 stackoverflow.com을 좋아한다. 감사! – Torid