develar / osslsigncode Goto Github PK
View Code? Open in Web Editor NEWLicense: Other
License: Other
osslsigncode ============ == WHAT IS IT? osslsigncode is a small tool that implements part of the functionality of the Microsoft tool signtool.exe - more exactly the Authenticode signing and timestamping. But osslsigncode is based on OpenSSL and cURL, and thus should be able to compile on most platforms where these exist. == WHY? Why not use signtool.exe? Because I don't want to go to a Windows machine every time I need to sign a binary - I can compile and build the binaries using Wine on my Linux machine, but I can't sign them since the signtool.exe makes good use of the CryptoAPI in Windows, and these APIs aren't (yet?) fully implemented in Wine, so the signtool.exe tool would fail. And, so, osslsigncode was born. == WHAT CAN IT DO? It can sign and timestamp PE (EXE/SYS/DLL/etc), CAB and MSI files. It supports the equivalent of signtool.exe's "-j javasign.dll -jp low", i.e. add a valid signature for a CAB file containing Java files. It supports getting the timestamp through a proxy as well. It also supports signature verification, removal and extraction. == INSTALLATION The usual way: ./configure make make install == USAGE Before you can sign a file you need a Software Publishing Certificate (spc) and a corresponding private key. This article provides a good starting point as to how to do the signing with the Microsoft signtool.exe: http://www.matthew-jones.com/articles/codesigning.html To sign with osslsigncode you need the certificate file mentioned in the article above, in SPC or PEM format, and you will also need the private key which must be a key file in DER or PEM format, or if osslsigncode was compiled against OpenSSL 1.0.0 or later, in PVK format. To sign a PE or MSI file you can now do: osslsigncode sign -certs <cert-file> -key <der-key-file> \ -n "Your Application" -i http://www.yourwebsite.com/ \ -in yourapp.exe -out yourapp-signed.exe or if you are using a PEM or PVK key file with a password together with a PEM certificate: osslsigncode sign -certs <cert-file> \ -key <key-file> -pass <key-password> \ -n "Your Application" -i http://www.yourwebsite.com/ \ -in yourapp.exe -out yourapp-signed.exe or if you want to add a timestamp as well: osslsigncode sign -certs <cert-file> -key <key-file> \ -n "Your Application" -i http://www.yourwebsite.com/ \ -t http://timestamp.verisign.com/scripts/timstamp.dll \ -in yourapp.exe -out yourapp-signed.exe You can use a certificate and key stored in a PKCS#12 container: osslsigncode sign -pkcs12 <pkcs12-file> -pass <pkcs12-password> \ -n "Your Application" -i http://www.yourwebsite.com/ \ -in yourapp.exe -out yourapp-signed.exe To sign a CAB file containing java class files: osslsigncode sign -certs <cert-file> -key <key-file> \ -n "Your Application" -i http://www.yourwebsite.com/ \ -jp low \ -in yourapp.cab -out yourapp-signed.cab Only the 'low' parameter is currently supported. You can check that the signed file is correct by right-clicking on it in Windows and choose Properties --> Digital Signatures, and then choose the signature from the list, and click on Details. You should then be presented with a dialog that says amongst other things that "This digital signature is OK". == CONVERTING FROM PVK TO DER (This guide was written by Ryan Rubley) If you've managed to finally find osslsigncode from some searches, you're most likely going to have a heck of a time getting your SPC and PVK files into the formats osslsigncode wants. On the computer where you originally purchased your certificate, you probably had to use IE to get it. Run IE and select Tools/Internet Options from the menu, then under the Content tab, click the Certificates button. Under the Personal tab, select your certificate and click the Export button. On the second page of the wizard, select the PKCS #7 Certificate (.P7B) format. This file you export as a *.p7b is what you use instead of your *.spc file. It's the same basic thing, in a different format. For your PVK file, you will need to download a little utility called PVK.EXE. This can currently be downloaded at http://support.globalsign.net/en/objectsign/PVK.zip Run: pvk -in foo.pvk -nocrypt -out foo.pem This will convert your PVK file to a PEM file. From there, you can copy the PEM file to a Linux box, and run: openssl rsa -outform der -in foo.pem -out foo.der This will convert your PEM file to a DER file. You need the *.p7b and *.der files to use osslsigncode, instead of your *.spc and *.pvk files. == BUGS, QUESTIONS etc. Send an email to [email protected] BUT, if you have questions related to generating spc files, converting between different formats and so on, *please* spend a few minutes searching on google for your particular problem since many people probably already have had your problem and solved it as well.
I need to sign ps1 files, but I don't want to have go to a windows machine just to sign a script. Is it possible to modify this program to also sign ps1 files?
A signed ps1 file would just have the signature appended to the end of the script:
# SIG # Begin signature block
# thesignaturewouldgohere
# ...
# SIG # End signature block
Hi. I tried to build on Ubuntu 18.04, and the build fails with the following. Build was clean on 16.04 (no warnings or errors)...
gcc -DHAVE_CONFIG_H -I. -I/usr/include/libgsf-1 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/libxml2 -I/usr/include/x86_64-linux-gnu -g -O2 -MT osslsigncode.o -MD -MP -MF .deps/osslsigncode.Tpo -c -o osslsigncode.o osslsigncode.c
osslsigncode.c: In function ‘createOpus’:
osslsigncode.c:453:36: warning: implicit declaration of function ‘M_ASN1_IA5STRING_new’; did you mean ‘ASN1_IA5STRING_new’? [-Wimplicit-function-declaration]
info->programName->value.ascii = M_ASN1_IA5STRING_new();
^~~~~~~~~~~~~~~~~~~~
ASN1_IA5STRING_new
osslsigncode.c:453:34: warning: assignment makes pointer from integer without a cast [-Wint-conversion]
info->programName->value.ascii = M_ASN1_IA5STRING_new();
^
osslsigncode.c:461:29: warning: assignment makes pointer from integer without a cast [-Wint-conversion]
info->moreInfo->value.url = M_ASN1_IA5STRING_new();
^
osslsigncode.c: In function ‘add_timestamp’:
osslsigncode.c:612:14: error: storage size of ‘mdctx’ isn’t known
EVP_MD_CTX mdctx;
^~~~~
osslsigncode.c:624:3: warning: implicit declaration of function ‘M_ASN1_OCTET_STRING_set’; did you mean ‘ASN1_OCTET_STRING_set’? [-Wimplicit-function-declaration]
M_ASN1_OCTET_STRING_set(req->messageImprint->digest, mdbuf, EVP_MD_size(md));
^~~~~~~~~~~~~~~~~~~~~~~
ASN1_OCTET_STRING_set
osslsigncode.c: In function ‘cleanup_lib_state’:
osslsigncode.c:819:2: warning: ‘ERR_remove_thread_state’ is deprecated [-Wdeprecated-declarations]
ERR_remove_thread_state(NULL);
^~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/openssl/crypto.h:32:0,
from /usr/include/openssl/bio.h:20,
from /usr/include/openssl/err.h:21,
from osslsigncode.c:106:
/usr/include/openssl/err.h:247:1: note: declared here
DEPRECATEDIN_1_1_0(void ERR_remove_thread_state(void *))
^
osslsigncode.c: At top level:
osslsigncode.c:927:1: warning: return type defaults to ‘int’ [-Wimplicit-int]
DECLARE_STACK_OF(ASN1_OCTET_STRING)
^~~~~~~~~~~~~~~~
osslsigncode.c: In function ‘DECLARE_STACK_OF’:
osslsigncode.c:936:1: error: expected declaration specifiers before ‘DECLARE_STACK_OF’
DECLARE_STACK_OF(SpcAttributeTypeAndOptionalValue)
^~~~~~~~~~~~~~~~
osslsigncode.c:1002:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘attribute’ before ‘{’ token
{
^
...
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.