Showing posts with label certificate. Show all posts
Showing posts with label certificate. Show all posts

Thursday, July 4, 2013

Replacing self-signed expired certificates using OpenSSL tool

I just realized that one of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 certificates I use was expired and OpenVPN didn't want to connect to a server for that reason. So, it was time to generate new certificate/key pair. That's easy, using CA.pl script, part of openssl-perl package. Just do cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following sequence of steps:
./CA.pl -newreq-nodes./CA.pl -sign
But cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 second command didn't work and I was getting cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following error messsage:
Sign cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 certificate? [y/n]:y
failed to update database
TXT_DB error number 2
Signed certificate is in newcert.pem
Quick search revealed that I'm trying to issue new certificate that has cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same name as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 existing one, even though cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 existing one was expired. There are multiple solutions to this, as documented in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 comment of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 blog post I found. But cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 real solution is to revoke expired certificate, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n to sign a new one (note that you don't have to generate anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r CSR):
ca -config openssl.cnf -revoke oldcert.crt -keyfile cakey.pem -cert cacert.pem
Note that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 revocation doesn't mean you have to have OCSP or CSR. Now, old certificate is revoked and you can sign a new one.

Thursday, January 3, 2013

Signing XML document using xmlsec1 command line tool

Suppose that you have some XML document you wish to sign. It turns out it's very easy to do so because cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is xmlsec library, and in particular xmlsec1 command line tool that's standard part of Fedora Linux distribution. The only problem is that its very picky and not very informative when it comes to error logging, finally, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are a lot of small details that can catch you. Since I had to sign a document I spent some time trying to figure out how to do that. In cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 end, I managed to do it and I'll write here how to for a future reference. Before I continue you'll need certificate and a key to be used for verification and signing. They are not cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 topic of this post so I'll just give you cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m: private key, certificate, and CA certificate.

Ok, let's assume that you have cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following XML document you wish to sign:


  
    Content of first element.
    
      Content of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 second element.
      
        And cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 content of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 third element.
      

    

  

Basically, you can take any XML document you wish. I'll suppose that this XML document is stored in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 file tosign.xml. If you typed yourself XML document, or if you just want to be sure, you can check if XML is well formed. There is xmllint tool that surves that purpose. Just run it like this:
$ xmllint tosign.xml
And if you don't get any error messages, or warnings, that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 XML document is well formed. You can also check if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 document is valid by providing schema, or DTD, via appropriate command line switches.

In order to sign this document you have to add XML Signature fragment to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 XML file. That fragment defines how cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 document will be signed, what will be signed, and, where cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 signature, along with certificate, will be placed. The fragment has cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following form:

  
    
    
    
      
        
        
      

      
      
    

    

  
  
    
  

Note that this (quite verbose) fragment has to be placed somewhere within cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 root element. Now, lets sign this, newly created document. To do so invoke xmlsec1 command like this (this is one line in case it is broken into two due to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 formatting):
xmlsec1 --sign --privkey-pem privkey.pem,cert.pem --output signed.xml tosign.xml
After this, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 signed XML document will be in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 file named signed.xml. Take a look into it, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 placeholders within signature fragment are filled up with signature data, and with a certificate who's private key was used to sign cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 XML document.

Note that signature itself is generated using private key (privkey.pem) which, as its name suggest, has to be private for a signer. Ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rwise, anyone can falsify signature.

Now, to verify signed XML document you have to specify trusted CA that will be used to verify signature. It has to be certificate of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 certificate authority (CA) that issued signer's certificate. In my case that's cacert.pem, i.e.:
$ xmlsec1 --verify --trusted-pem cacert.pem signed.xml
OK
SignedInfo References (ok/all): 1/1
Manifests References (ok/all): 0/0
As you can see, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 signature was verified OK. You can try now to change something in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 XML document and see if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 verification passes or not.

I'll mentioned one more thing before concluding this post. Namely, in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 previous example cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 whole XML document was signed. But, you can sign only a part. To do so, you have to do two things. The first one is to mark cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 element that you wish to sign (its content will also be signed) and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 second is to tell xmlsec1 to sign only that element.

The first step is accomplished by adding attribute to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 element that should be signed. Let's assume that in our case we only want secondelement to be signed. Modify cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 appropriate opening tag to have cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following form:
Note that I added attribute id, but basically any name can be used (unless you use some predefined schema or DTD).

The second step is to tell xmlsec1 that only this element should be signed. This is accomplished by modifying Reference element to have cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following form:
If you now try to sign this modified XML document using command I gave above, you'll receive an error message:
$ xmlsec1 --sign --privkey-pem cert.key,cert.pem --output test_signed.xml tosign.xml
func=xmlSecXPathDataExecute:file=xpath.c:line=273:obj=unknown:subj=xmlXPtrEval:error=5:libxml2 library function failed:expr=xpointer(id('signonlythiselement'))
func=xmlSecXPathDataListExecute:file=xpath.c:line=356:obj=unknown:subj=xmlSecXPathDataExecute:error=1:xmlsec library function failed:
func=xmlSecTransformXPathExecute:file=xpath.c:line=466:obj=xpointer:subj=xmlSecXPathDataExecute:error=1:xmlsec library function failed:
func=xmlSecTransformDefaultPushXml:file=transforms.c:line=2405:obj=xpointer:subj=xmlSecTransformExecute:error=1:xmlsec library function failed:
func=xmlSecTransformCtxXmlExecute:file=transforms.c:line=1236:obj=unknown:subj=xmlSecTransformPushXml:error=1:xmlsec library function failed:transform=xpointer
func=xmlSecTransformCtxExecute:file=transforms.c:line=1296:obj=unknown:subj=xmlSecTransformCtxXmlExecute:error=1:xmlsec library function failed:
func=xmlSecDSigReferenceCtxProcessNode:file=xmldsig.c:line=1571:obj=unknown:subj=xmlSecTransformCtxExecute:error=1:xmlsec library function failed:
func=xmlSecDSigCtxProcessSignedInfoNode:file=xmldsig.c:line=804:obj=unknown:subj=xmlSecDSigReferenceCtxProcessNode:error=1:xmlsec library function failed:node=Reference
func=xmlSecDSigCtxProcessSignatureNode:file=xmldsig.c:line=547:obj=unknown:subj=xmlSecDSigCtxProcessSignedInfoNode:error=1:xmlsec library function failed:
func=xmlSecDSigCtxSign:file=xmldsig.c:line=303:obj=unknown:subj=xmlSecDSigCtxSigantureProcessNode:error=1:xmlsec library function failed:
Error: signature failed
Error: failed to sign file "tosign.xml"
The problem is that URI attribute references ID attribute of an element. But, ID element isn't recognized by name but has to be specified in DTD or in schema, depending what you have. In our case cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is neicá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r schema nor DTD and thus ID isn't recognized by xmlsec1. So, we have to tell it what is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 name of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ID attribute, and that can be done in two ways. The first one is by using command line switch --id-attr, and so cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 command to sign this document is:
xmlsec1 --sign --privkey-pem privkey.pem,cert.pem --id-attr:id secondelement --output signed.xml tosign.xml
The name after cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 column is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attribute name that is ID. Default value is "id", but can be anything else. If it is "id", cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n it can be omitted. The argument to --id-attr is element whose attribute should be treated as an id. You should also be careful of namespaces. If cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y are used cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 namespace of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 element has to be specified too, and not shorthand but cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 full namespace name. Finally, note that XML is case sensitive!

The ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r possibility is to create DTD file and to give it as an argument to xmlsec1. In this case, DTD should look like this (I'll assume that this is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 content of a file tosign.dtd):
And you would invoke xmlsec1 like this:
xmlsec1 --sign --privkey-pem privkey.pem,cert.pem --dtd-file tosign.dtd --output signed.xml tosign.xml
Note that you'll receive a lot of warnings (DTD is incomplete) but cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 file will be signed. To check cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 signature, you again have to specify eicá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r --dtd-file or --id-attr options, e.g.
xmlsec1 --verify --trusted-pem cacert.pem --id-attr:id secondelement signed.xml
Now, you can experiment to check that really only secondelement was signed and nothing else.

Final note. You have to put XML signature fragment in XML file you are signing. What can confuse you (and confused me) is that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is an option sign-tmpl that adds this fragment, but it is very specific and used only for testing purposes.

Thursday, November 8, 2012

Installing certificate for Alfresco...

This post is continuation of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 post about installing Alfresco using native Tomcat6 installation (on CentOS6). If you followed steps given in that post, you have running Alfresco installation but Tomcat uses self-signed certificate.

To install your own certificate first obtain it (you can use your own, self managed, CA or you can buy commercial one), cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n install it on your Tomcat instance. You'll find a lot of information about this in SSL Howto on Tomcat's Web pages, but that page assumes that everything you do, you are doing using keytool.

Here is a quick Howto with an assumption that you have files newcert.pem (containing certificate), newkey.pem (containing private key) and cacert.pem (your CA certificate). By default, tomcat's keystore is in its home (/usr/share/tomcat6) and it is named .keystore. Keystore file is password protected and default password for it is changeit. Note that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 period isn't part of password! I suggest that you copy this file to root's home under cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 name keystore (note no leading dot!) or whatever else you wish so that you can restore old copy in case something goes wrong with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following steps.

The installation is two step process. First, you create keystore containing you certificate, private key and CA's certificate. In second step, you import that information to Tomcat's keystore.

First step is to pack certificate for Alfresco, its private key and CA's certificate into PKCS12 store using openssl tool as follows:
$ openssl pkcs12 -export \
        -in newcert.pem -inkey newkey.pem \
        -out mycert.p12 -name tomcat \
        -CAfile cacert.pem -caname root -chain
Enter Export Password:
Verifying - Enter Export Password:
This command assumes that all necessary files (newcert.pem, newkey.pem and cacert.pem) are in you current directory. Output of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 command is also stored into current directory. Note that you are asked for password that will protect all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 data. Enter something or later you'll see cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following warning:
*****************  WARNING WARNING WARNING  *****************
* The integrity of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 information stored in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 srckeystore*
* has NOT been verified!  In order to verify its integrity, *
* you must provide cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 srckeystore password.                *
*****************  WARNING WARNING WARNING  *****************
And cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n you'll receive cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following error:
keytool error: java.security.UnrecoverableKeyException: Get Key failed: / by zero
Second step is to import this pkcs12 file to tomcat's keystore using keytool as follows:
$ keytool -importkeystore -srckeystore mycert.p12 \
        -srcstoretype pkcs12 -destkeystore /usr/share/tomcat6/.keystore
Enter destination keystore password:
Enter source keystore password:
Existing entry alias tomcat exists, overwrite? [no]:  yes
Entry for alias tomcat successfully imported.
Import command completed:  1 entries successfully imported, 0 entries failed or cancelled
Again, input file is in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 current directory and you are importing directly into tomcat's keystore. Note that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 existing certificate with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 alias tomcat will be removed and you are asked to confirm that! The default alias Tomcat searches when it start is called tomcat.

Third step is to change private key's password that has to be cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same as for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 keystore. Do that using cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following command:
keytool -keypasswd -alias tomcat -new -keystore /usr/share/tomcat6/.keystore
You'll be asked for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 keystore's password and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 password for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 key will be set to keypassword.

And that's it. Restart tomcat and check if it is using new certificate.

Thursday, September 1, 2011

CAs are broken... but... cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re may be a fix...

Everyone by now heard of security breach of DigiNotar. The Internet is full of stories about it! I won't go into details what happened. Instead, I'll try to pinpoint what actual problem is, and, based on that, I'll try to outline possible solution.

Let us start with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 problem. The problem is that every single CA is actually single point of failure of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 whole distributed system. Do you need fraudulent Google certificate? No problem, attack cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 weakest CA you can find, or try to attack more of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re you go.  Now, I can here you say: Remove weakest CA! Well, it's not so easy. Applying this rule recursively you'll end up with one, or no CAs at all. This is not a solution eicá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r. And this also adds anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r dimension to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 problem, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 less CAs cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 more fragile cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Internet becomes because each CA is anyway highly likely target. And you know cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 main premise of security: You are never ever absolutely secure!

So, what is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 solution? I believe that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 solution is to keep cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 system as it is, but to introduce signatures from multiple CAs in a single certificate. This won't resolve cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 problem, but it will make life harder to hackers. Besides, absolute security doesn't exist, as I already mentioned.

From cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 implementation standpoint, it is possible to do this eicá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r by changing certificate structure, or to change implementations so that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y can check multiple certificates. In case multiple certificates are used it's obviously necessary to have some common information that will allow all those certificates to be related.

Validity of certificate (or certificates) could be calculated probabilisticaly. Additionally,  some independent measure of correlation between CAs could be defined so that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 validity of a single site that uses this system can be evaluated based on this correlation measure (meaning, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 less correlated CAs signed cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 more valid it is).

Note that if a single CA goes into bankruptcy, or is removed from trusted CA list, doesn't mean that everyone has to issue a new certificate imediatelly.

I would say that CAs implemented this way would be somewhere between current CA system and PGP Web of Trust.

About Me

scientist, consultant, security specialist, networking guy, system administrator, philosopher ;)

Blog Archive