2017-11-06 14 views
0

나는 엘릭서를 사용하여 서명 된 쿠키로 CloudFront를 설정하려고 노력했습니다. 내가 서명 한 것을 보면 sha1 인코딩을 사용해야합니다. 같을 것이다 터미널에서 AWS에 따르면엘릭서로 AWS 서명 된 쿠키를 만드는 방법은 무엇입니까?

cat policy.json | openssl sha1 -sign CloudFront_Key.pem |base64 |tr '+=/' '-_~'

내가 불로 불사의 영약에 그 작업을 수행하는 방법을 알아낼 수 없습니다. 나는 this dependency을 조사해 왔고 방법 대신 :sha1을 사용해 보았습니다. 나는 here을 통해 읽었으며 sha1이 아니라 sha를 보았습니다. 에를랭이 그것을 부르는 방식입니까? (나는 에얼랑에 대한 지식이 거의 없다.) :sha을 시도했지만 터미널에서와 동일한 키를 얻지는 않습니다. 작동하지 않는 것 같습니다. 나는 또한 base64가 대개 단말기보다 몇 개의 여분의 문자를 추가한다는 것을 알았다. 무엇을 해야할지 잘 모릅니다. 리조트를 System.cmd을 사용해 보시나요? 당신은이에 대한 :public_key.sign/3을 사용할 수 있습니다 create & verify signed cookiescreate signature for signed cookie

+0

'public_key : sign/3'을 사용해야한다고 생각합니다. 예상 출력과 샘플 json 및 pem 파일을 공유 할 수 있습니까? 'public_key : sign/3'으로 시도해 보겠습니다. – Dogbert

+0

샘플 pem http://www.filedropper.com/pk. json 콘텐츠는 {{ "Statement": {{ "Resource": "https://mycloudfront.net/a.png", "조건": { "DateLessThan": { "AWS : EpochTime": 1512086400}}입니다. }]}'같은 것을 사용합니까 : public_key? 그렇다면 어떤 명령을 사용합니까? – Vantalk

답변

2

:

이것은 내가 다음있어 AWS의 문서입니다. 참고로

,

$ cat pk.pem 
-----BEGIN RSA PRIVATE KEY----- 
MIIEowIBAAKCAQEAknEbD26dg4w2JlaN2pmtz7sEBSEjFcfsgcUuV100L60Lz36s 
EDySjiTMbhfhKRa46gBvGSEzb8G1l4iD1O5M5mfzEVg/shSOgwVfyvq5XShJBaz6 
PcKJ4hsLh/aUIkvnfYWg5zdcPj5FBYT0I+jLnWvNevsolfGwN4rY5S/PuBCUwtVC 
m1L3p5bVHvR33tjI4qenHkuRJUnJh4TMLCOTCGHdmZ+yyWJ2rLcYq7yciI0WlRh5 
cCI1eYEehUsbcifOyazKNOAmO/9DzXZlo9S0TSYjxrG626mt+j9yD473t/FSfUeg 
6Hn67wfGBWAk0HezJ3QGRl9jBAeYhSLbaX7DHQIDAQABAoIBAHo+Blu8d6oe+fjI 
2cM389pq/7EUd0gwSmINamCtQenmZux/jjxDhAc5+piQQHlfKV7Um+j7SQeqSN7E 
q1+syO6wqTu6UflipZADhXJYFzIHdeVR/tZdNWJUNyz5DbEPcZ7bVHSORucCbfVs 
hawQISA4pB9b1wZL6VCEDAhM//ViRgBA3k6tBu5jNi+I1WXE9nrat4DSDV3uklfo 
f5KfHLhbHgrl7R7jnAyWBya6O6Pw0r/3FeWrjo6W0wht5BprX4HSgJvpWtqjhodA 
iucWjmWV7Gt++HBRX0NEQozajQ7fdfnCOpSD2g8QzVw/5whRBidYngJWLBNt1YQV 
UMi7toECgYEAzw4i+m0PnqiExMOSLsvPcEQu0wScOe3vwXTBOcfOS0Uds0kWzZP2 
BHQL7IATtN+OAMdtFi1xyN+auikTsZpy1hezUtamfeo75btFhgSrtRXQki5o3pX8 
HgDh+31+Ox1RM/Qhm4DSPQ/YImw+HQD+lK9sw3yNZlmPmXwyCARxkCECgYEAtQ75 
M5HcBG+zPbPHc4mrOgtQzaUTEs1onu/zDCuFZwYtyBB0RKSLLmacgh/Qcdu13Lli 
fdTqego5asKztQfsB88aqkYtdY51dnm+H2sxQ2ef+1D2gbV+sdrsM7gUuVvxBMwv 
itFizQ1rgZn/Vee4zfFXEoURjkKfTKT27Hn7A30CgYEAx4ugOiiRPR67lcXFREQ3 
jsKnPcbbqRieT5rt/XmKXxAlJ3vw9f76wh/0veBRHae1exq3DwCNAEI/I9oimK94 
rMv6joM/wWnUf/qTbi1iLgrwD3Gar6lsaJ4BLBYtaVs/vwowuWTVOPPkIIig8+LZ 
dwH5mAyZWWJG+myu6vsdVwECgYAJqT/g4ZKU5gTxcOteneT2Fu572qgW48EGYhVc 
++GFas38k+wwUXtfwXfudZYgzTF6EqZPwpG0a2E+8h62tTKCBCoPFemNEUnxRXPA 
p26cgyYFOf+9UhrtkJnz9Imejmpg8ChFRwD3ohSveLEoO1IgIxWbVmBmb+WiKFdI 
rQWY3QKBgA6Gw/8KB7LxqR3N9/1xgW5b02WVhG7gvFNlSYZMmdd8H3w8MdXCdk22 
kJBfrIfkDS6nbF6w4+8q309NPwOqdkt2QNPq6Il1ugWuxFMiNEGHjjT21PrsgEJS 
q6K6c+znrnI7O/wijdvEC2n+q+S9h8yv1bT6QfC1Vx88SC9GCBuq 
-----END RSA PRIVATE KEY----- 
$ cat policy.json 
{"Statement":[{"Resource":"https://mycloudfront.net/a.png","​Condition":{"DateLes​sThan":{"AWS:EpochTi​me":1512086400}}}]} 

우선, 키 읽어

iex(2)> File.read!("policy.json") |> :public_key.sign(:sha, key) |> Base.encode64 
"QjLmx3LASRb1zt9eW/EMywGMXB1SwX/0JrTnLOFulYjcRJ1dpacUZBB/AYI1zwaXPEQTgQ8crNDFgje6fqbLKoNwgcpE9mOK/RdDKi963ztJnD6EmtM60YbROSpjQ/LDupEYgipPNZbjCnRCJcqDX43BadbVR75G3B5mFmAwtRSPdslJ5irVnt9PjoDMdi9DYe1wGhgQkoym1tiKEyaTrH5lyrw+KPdAi1tpzuZ60ZEcQFJJbKqYYdA0SslbUFL71mdLLkQ9xz95JPNpsSY3ZJyJsKpRGFJuaL1aMsdNLxlLD91PpNW15FitBpBnAwuiiEfPrwU14zIxsfFszaM6KA==" 

출력 OpenSSL을 동일 :

iex(1)> key = File.read!("pk.pem") |> :public_key.pem_decode |> hd |> :public_key.pem_entry_decode 
... 

그럼 :public_key.sign/3를 사용하여 데이터를 서명

$ cat policy.json | openssl sha1 -sign pk.pem | base64 
QjLmx3LASRb1zt9eW/EMywGMXB1SwX/0JrTnLOFulYjcRJ1dpacUZBB/AYI1zwaXPEQTgQ8crNDFgje6fqbLKoNwgcpE9mOK/RdDKi963ztJnD6EmtM60YbROSpjQ/LDupEYgipPNZbjCnRCJcqDX43BadbVR75G3B5mFmAwtRSPdslJ5irVnt9PjoDMdi9DYe1wGhgQkoym1tiKEyaTrH5lyrw+KPdAi1tpzuZ60ZEcQFJJbKqYYdA0SslbUFL71mdLLkQ9xz95JPNpsSY3ZJyJsKpRGFJuaL1aMsdNLxlLD91PpNW15FitBpBnAwuiiEfPrwU14zIxsfFszaM6KA== 
+0

나는 그런 식으로 열쇠를 읽은 적이 없다 : o. 제가 갈 수있는 곳은 pem_decode였습니다. 지금 시도 중 – Vantalk

+0

작업 중. 정말 고맙습니다! 그것으로 작업하는 동안 나는 또한 콘텐츠가 보이는 것을'File.read' 대신에'map |> Poison.encode()'를하려고 시도하고 있었지만'\ n'을주지 않았다고 생각합니다. 결국. 그것은 인코딩을 더 엉망으로 만들었고, 이제 base64 인코딩을 할 때 보았던 여분의 문자를 설명합니다. 이것에 일을 보내십시오. 너 락! – Vantalk